UIImageView의 애니메이션
- 애니메이션으로 출력될 이미지(UIImage) 
 
var animationImages: [UIImage]?
var highlightedAnimationImages: [UIImage]?
- 애니메이션 속성(시간, 반복) 
 
var animationDuration: TimeInterval
var animationRepeatCount: Int
- 애니메이션 시작/중지 
 
func startAnimating() func stopAnimating()
- 예제 코드
 
@IBOutlet var imageView : UIImageView! 
@IBAction func startAnimation(_ sender: Any) {
	imageView.startAnimating() 
}
@IBAction func stopAnimation(_ sender: Any) { 
	if imageView.isAnimating {
			imageView.stopAnimating() 
		}
}
override func viewDidLoad() {
	super.viewDidLoad()
	let images = [ image1, image2, image3 ] 
	imageView.animationImages = images 
	imageView.animationDuration = 3
}
UIView Animation
일정 시간동안 속성 변경
- Animation 가능뷰속성
    
- frame, bounds, center : 뷰의 위치와 크기
 - transform : 좌표 행렬
 - alpha : 투명도
 - backgroundColor : 배경색
 - contentStretch : 확대/축소 영역
 
 - 애니메이션 불가능 속성
    
- hidden 처럼 중간값 계산이 불가능한 속성
 
 
UIView Animation
- duration: Animation 지속 시간
 - delay: Animation 시작전 지연시간
 - animations: 속성 변경 코드
 - completion: 애니메이션 종료 후
 
class func animate(withDuration:duration: TimeInterval, animations: () -> Void) class func animate(withDuration:duration: TimeInterval,
	animations: () -> Void, completion: ((Bool) -> Void)?) 
class func animate(withDuration:duration: TimeInterval,
	delay: TimeInterval,
	options: UIViewAnimationOptions=[],
	animations: () -> Void, completion: ((Bool) -> Void)?)
- 애니메이션은 비동기로 동작함, 애니메이션 종료 때까지 대기하지 않음.
 
class ViewController: UIViewController {
    var currentView: UIView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        currentView = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
        if let currentView = currentView {
            currentView.backgroundColor = .black
            view.addSubview(currentView)
        }
        
        
    }
    
    @IBAction func startButtonAction(_ sender: UIButton) {
        UIView.animate(withDuration: 1.0) {
            self.currentView?.center = CGPoint(x: 300, y: 300)
        }
        self.currentView?.backgroundColor = .red 
    }
}
View의 이동이 끝나고, View의 background color 변경 되는것을 예상했지만, 뷰가 이동하면서 동지에 backgroundColor 값이 변했습니다. 예상한대로 애니메이션이 끝나고, 어떤 동작을 하고싶을때는 Completion이 있는 Animation을 사용합니다.
Transition Animation
- 뷰의 트랜지션
 - 뷰의 전환
 - 기존 뷰는 사라지고(removeFormSuperview)새로운 뷰가 나타나는(addSubView) 동작
 - 뷰 추가/삭제 코드 불필요
 
import UIKit
class ViewController: UIViewController {
    var currentView: UIView?
    var newView: UIView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        currentView = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
        newView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        newView?.backgroundColor = .red
        if let currentView = currentView {
            currentView.backgroundColor = .black
            view.addSubview(currentView)
        }
    }
    
    @IBAction func startButtonAction(_ sender: UIButton) {
        UIView.transition(from: currentView!,
                          to: newView!,
                          duration: 1.0,
                          options: [.transitionCrossDissolve]) { (finished) in
                            print("transition finished")
        }
    }
}