어흥

[Swift] Animation 본문

iOS

[Swift] Animation

라이언납시오 2020. 9. 15. 14:43
728x90
반응형

1. 사용 목적(개인적인 생각입니다)

- 딱딱한 앱에서 벗어나기 위해

- 시각적인 효과를 통한 이목 집중

 

2. 코드

- 움직일 대상(코드에선 Label)의 Outlet을 미리 선언해야 한다

- view가 Load 되자마자 애니메이션을 수행하기 위해 viewDidLoad() 함수를 Override한다 

- view가 나타난 이후 수행될 애니메이션은 viewDidAppear()의 함수를 Override해서 애니메이션을 설정한다

//Outlet 설정
@IBOutlet weak var nameLabelCenterX: NSLayoutConstraint!
@IBOutlet weak var bountyLabelCenterX: NSLayoutConstraint!


override func viewDidLoad() {
    super.viewDidLoad()
    updateUI()
    prepareAnimation()
}
    
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    showAnimation()
}

private func prepareAnimation(){
        //화면 밖으로 보내기 위헤
        //nameLabelCenterX.constant = view.bounds.width
        //bountyLabelCenterX.constant = view.bounds.width
        
        //심화버전 -> 회전하면서 들어온다
        nameLabel.transform = CGAffineTransform(translationX: view.bounds.width, y: 0).scaledBy(x: 3, y: 3).rotated(by: 180)       
        bountyLabel.transform = CGAffineTransform(translationX: view.bounds.width, y: 0).scaledBy(x: 3, y: 3).rotated(by: 180)
        //투명도 설정
        nameLabel.alpha = 0
        bountyLabel.alpha = 0
}
    
private func showAnimation(){
    nameLabelCenterX.constant = 0
    bountyLabelCenterX.constant = 0
    
    //몇초동안, 몇초 이후, 천천히->빨라지도록,자체,애니메이션이 끝난 후 작업
    /*UIView.animate(withDuration: 0.3, delay: 0.1,options: .curveEaseIn,
    animations:{ self.view.layoutIfNeeded()}, completion: nil)
    */
    
    //스프링처럼 애미네이션 처리
    /*
    UIView.animate(withDuration: 0.5, delay: 0.2,
    usingSpringWithDamping: 0.6, initialSpringVelocity: 2,
    options: .allowUserInteraction, animations:{ self.view.layoutIfNeeded()},
    completion: nil)
    */
    
    //이름 라벨 투명도 0->1로 전환 및 기타 설정
    UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 2, options: .allowUserInteraction, animations: {
        self.nameLabel.transform = CGAffineTransform.identity
        self.nameLabel.alpha = 1
    } , completion: nil)
    
    //가격 라벨 투명도 0->1로 전환 및 기타 설정
    UIView.animate(withDuration: 1, delay: 0.2, usingSpringWithDamping: 0.6, initialSpringVelocity: 2, options: .allowUserInteraction, animations: {
        self.bountyLabel.transform = CGAffineTransform.identity
        self.bountyLabel.alpha = 1
    } , completion: nil)
            
    
    //UIImage도 애니메이션 적용(360도 뒤집기)
    UIView.transition(with: imgView, duration: 0.3, 
    options: .transitionFlipFromLeft, animations:{ self.view.layoutIfNeeded()},
    completion: nil)
}
728x90
반응형

'iOS' 카테고리의 다른 글

[Objective-C] 기본 내용 2  (0) 2020.10.14
[Objective - C] 기본 개념  (0) 2020.09.24
[Swift] CollectionView  (0) 2020.09.15
[Swift] Segue - 데이터 전달  (2) 2020.09.10
[Swift] Custom TableView, Segue  (0) 2020.09.08
Comments