iOS动画(二):核心动画中的基础移动(Swift)
简单的移动
-
新建一个
CALayer
。1 2 3 4 5 6 7 8 9 10
lazy var redLayer: CALayer = { return self.createLayer() }() func createLayer() -> CALayer { let redLayer = CALayer() redLayer.position = CGPoint(x: 200, y: 200) redLayer.bounds = CGRect(x: 0, y: 0, width: 100, height: 100) redLayer.backgroundColor = UIColor.red.cgColor return redLayer }
-
把新建的
CALayer
添加的view
的layer
中。view.layer.addSublayer(redLayer)
-
遵守协议
CAAnimationDelegate
class BasicPostionViewController: UIViewController, CAAnimationDelegate {
-
创建动画
CABasicAnimation
,并添加的CALayer
中。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
func createCABasicAnimation() -> CABasicAnimation { let basicAni = CABasicAnimation() // 设置动画属性 basicAni.keyPath = "position" basicAni.fromValue = NSValue.init(cgPoint: CGPoint(x: 0, y: 0)) basicAni.toValue = NSValue.init(cgPoint: CGPoint(x: 300, y: 300)) basicAni.duration = 2 basicAni.fillMode = kCAFillModeForwards basicAni.isRemovedOnCompletion = false basicAni.delegate = self return basicAni }
- forKey 是动画对象的名字,只是用来标识,没有特殊意义。
稍微复杂的移动
原理和上面相同,都是先创建CALayer
,然后添加CABasicAnimation
。
|
|
- 1
timingFunction
代表移动模式:kCAMediaTimingFunctionLinear
(线性):匀速,给你一个相对静态的感觉kCAMediaTimingFunctionEaseIn
(渐进):动画缓慢进入,然后加速离开kCAMediaTimingFunctionEaseOut
(渐出):动画全速进入,然后减速的到达目的地kCAMediaTimingFunctionEaseInEaseOut
(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。
参考: