swift
Floating Button
mooooon
2023. 4. 27. 10:27
swift 에서 간단한 floating button 만들기
floating button개발중 기록을 위해 남기기로 한다.
1. floating button 에 사용할 아이콘 배치
> stack view를 사용하여 아이콘 배치 후 menu를 통해서 보여지는 버튼들은 hidden
** 버튼에 이미지를 넣는경우 이미지사이즈가 버튼영역과 맞지 않는 경우
> assets에서 넣고자하는 이미지 선택 후 Image Set > Render As 에서 Default 를 Original Image로 변경한다.
2. 버튼 이벤트
2-1. Menu Button 회전
@IBOutlet weak var floatingHomeButton: UIButton!
@IBOutlet weak var floatingQrcodeButton: UIButton!
lazy var floatingButtons: [UIButton] = [self.floatingHomeButton, self.floatingQrcodeButton]
var isFloatingHidden: Bool = false
...
// floating menu button
@IBAction func floatingMenuButtonTouched(_ sender: UIButton) {
// 탭했을때 이미지 변경
let changeImage = isFloatingHidden ? UIImage(named: "floating_menu") : UIImage(named: "floating_close")
// 탭 했을 경우 90도 회전
let rotation = isFloatingHidden ? CGAffineTransform.identity : CGAffineTransform(rotationAngle: .pi - (.pi / 2))
UIView.animate(withDuration: 0.3) {
sender.setImage(changeImage, for: .normal)
// 버튼의 이미지만 회전시키기 위해서 imageView추가 (그림자 고정)
sender.imageView?.transform = rotation
}
isFloatingHidden.toggle()
}
2-2. 숨겨진 아이콘 노출
// floating buttons show/hide
func floatingButtonOpenEvent() {
if isFloatingHidden {
// close시 버튼들의 역방향으로 애니메이션 이벤트 추가 및 숨김
floatingButtons.reversed().forEach { button in
UIView.animate(withDuration: 0.3) {
button.isHidden = true
self.view.layoutIfNeeded()
}
}
} else {
// open시 아이콘 노출
floatingButtons.forEach { [weak self] button in
UIView.animate(withDuration: 0.3) {
button.isHidden = false
button.alpha = 0
UIView.animate(withDuration: 0.3) {
button.alpha = 1
self?.view.layoutIfNeeded()
}
}
}
}
}