-
iOS] ChainAnimationProgramming/iOS 2020. 3. 7. 16:39
View 를 탭했을때, UILabel 에 Chain Animation 적용해보자.
viewDidLoad 에서 UILabel의 레이아웃을 잡고, 현재 view 에 탭제스쳐를 붙인다.
override func viewDidLoad() { super.viewDidLoad() setupLabels() setupStackView() //animations view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTapAnimation))) }
handleTapAnimation 코드
// Animation - titleLabel UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: .curveEaseOut, animations: { self.titleLabel.transform = CGAffineTransform(translationX: -30, y: 0) }) { (_) in //2 animation UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: { self.titleLabel.alpha = 0 self.titleLabel.transform = self.titleLabel.transform.translatedBy(x: 0, y: -200) }) } //Animation - bodyLabel UIView.animate(withDuration: 0.5, delay: 0.5, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: .curveEaseOut, animations: { self.bodyLabel.transform = CGAffineTransform(translationX: -30, y: 0) }) { (_) in UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: { self.bodyLabel.alpha = 0 self.bodyLabel.transform = self.bodyLabel.transform.translatedBy(x: 0, y: -200) }) }
리펙토링
fileprivate func handleAnimateLabel(delay: TimeInterval, startAnimation: @escaping ()->Void, _ endAnimation: ((Bool)->Void)? = nil){ UIView.animate(withDuration: 0.7, delay: delay, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: .curveEaseIn, animations: startAnimation, completion: endAnimation) } fileprivate func animation_start(label: UILabel) -> () -> Void{ { label.transform = CGAffineTransform(translationX: -30, y: 0) } } fileprivate func animation_end(label: UILabel) -> Void{ label.alpha = 0 label.transform = self.titleLabel.transform.translatedBy(x: 0, y: -200) } @objc fileprivate func handleTapAnimation(){ // titleLabel animation handleAnimateLabel(delay: 0, startAnimation: animation_start(label: titleLabel)) { (_) in self.handleAnimateLabel(delay: 0, startAnimation: { self.animation_end(label: self.titleLabel) }) } // bodyLabel animation handleAnimateLabel(delay: 0.5, startAnimation: animation_start(label: bodyLabel)) { (_) in self.handleAnimateLabel(delay: 0, startAnimation: { self.animation_end(label: self.bodyLabel) }) } }
'Programming > iOS' 카테고리의 다른 글
AutoLayout] 우선순위 설정 1 (0) 2020.03.12 SnapKit 으로 UI 만들기 (0) 2020.03.11 iOS_13] present 로 뷰를 넘겼을때, 카드형태로 나오는 현상 (0) 2020.03.06 Firebase-smallProject] 2. 회원가입 (0) 2020.03.06 Firebase-smallProject] 1. 프로젝트 생성하기 (0) 2020.03.05