Swift基础入坑

动画--简单方法

2018-06-11  本文已影响9人  iOS_July

一、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
上一篇下一篇

猜你喜欢

热点阅读