一、animate方法
它位于UIView类中
UIView.animate(withDuration: ,
delay: ,
usingSpringWithDamping: ,
initialSpringVelocity: ,
options: ,
animations: <() -> Void>,
completion:() -> Void)
它是每一个动画的基础
二、动画定义
动画是用快速显示一系列静态图片(帧)来模拟动作和图形转换的过程。
动画是物体移动或者尺寸变化的“幻影”
首帧[第一帧]--->第二帧--->第三帧--->尾帧
三、如何生成这么多的帧数?
只需在UIView.animate中指定首帧和尾帧,其他的系统会帮我们自动计算。
四、如何改变动画尺寸呢?
transform函数集 > 缩放、旋转和移动视图
@ 缩放:
//一开始不显示
RatingStackView.transform = CGAffineTransform(scaleX: 0, y: 0)
@ 移动:
RatingStackView.transform = CGAffineTransform(translationX: 0, y: 500)
override func viewDidAppear(_ animated: Bool) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: [], animations: {)
self.RatingStackView.transform = CGAffineTransform(translationX: 0, y: 0)
}, completion: nil)
}
@ 动画组合:
let startPos = CGAffineTransform(translationX: 0, y: 500)
let startScale = CGAffineTransform(scaleX: 0, y: 0)
RatingStackView.transform = startScale.concatenating(startPos)
override func viewDidAppear(_ animated: Bool) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: [], animations: {
let endPos = CGAffineTransform(translationX: 0, y: 0)
let endScale = CGAffineTransform.identity
self.RatingStackView.transform = endPos.concatenating(endScale)
}, completion: nil)
}
注意:
这里动画的 首帧设置 和 尾帧设置 需要按照AB BA的方式排列
不能以ABAB的方式排列,否则只会执行B的动画
五、设置动画启动时机和时长
选择在当视图每一次显示完毕的时候,即在viewDidAppear加入:
override func viewDidAppear(_ animated: Bool) {
UIView.animate(withDuration: 0.3) {
//显示视图原来的样子
self.RatingStackView.transform = CGAffineTransform.identity
}
}
六、补充动画效果
Damping:达到尾帧之前的震荡摆动效果和时间
initialSpringVelocity:初识速度
自iOS7开始有的,可把动画方法替换成
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: [], animations: {
self.RatingStackView.transform = CGAffineTransform.identity
}, completion: nil)
补充KVC
Key Path | Type | Value |
---|---|---|
layer.cornerRadius | Number | 20 |