本节将介绍CALayer与Core Animation基础,找找通过Layer操作动画的感觉,你将学到如何移动、隐藏显示Layer的方法
animation properties
Layer中很多动画属性的使用方法与View类似,例如frame、position、opacity等,另外还提供了border、shadow等新属性,接下来我们来看看Layer中给了我们什么可以动画变化的属性
Position and size
bound
Layer的范围position
Layer在父Layer中的的位置,可以分别修改x、y
-transform
改变中国属性可以移动、缩放、旋转Layer,甚至可以加入3D动画
Border
borderColor
边框颜色borderWidth
边框宽度cornerRadius
角的弧度,可以实现圆角
Shadow
shadowOffset
改变这个属性可以改变阴影与Layer的远近shadowOpacity
改变这个属性可以改变阴影的显示shadowPath
改变Layer shadow的形状,可以加入各种各样的3D效果shadowRadius
改变阴影的模糊程度,在模拟物体朝向屏幕运动或远离屏幕的动画中使用较多
Contents
content
改变这个属性可以改变Layer内含的TIFF、PNG原始数据mask
改变这个属性可以改变图像上的遮盖opacity
改变内容的透明度
以上的属性就已经足够你实现一些基于Layer的动画了,下面我们通过Demo练习一下
First Layer Animation
这次我们的Demo利用Layer Animation替换之前登录页面Demo中的View Animation
我们从heading开始,在viewWillAppear
及viewDidAppear
方法中删除有关代码(对于控件初位置的设定在动画中实现)
创建动画
我们在在viewDidAppear
方法中添加动画
let flyRight = CABasicAnimation(keyPath: "position.x")
flyRight.fromValue = -view.bounds.size.width/2
flyRight.toValue = view.bounds.size.width/2
flyRight.duration = 0.5
CoreAnimation中的对象都是一些简单的数据模型,我们只需实例化并设置相应的数据即可
一个CA实例描述了具体的Layer动画,你可以随时使用这个动画
这些动画实例并不急于具体的Layer,你可以在需要的时候重用代码,每次添加动画时都会创建它的一份拷贝
对于一个CA对象,你可以很方便的通过keypath参数具体说明动画的属性
随后我们设置了fromValue
、toValue
属性调整了动画的开始与结束
最后我们设置了动画进行的时间
把动画添加到layer上
通过上面的代码我们已经创建了动画,现在我们来把动画添加到具体的layer上
heading.layer.addAnimation(flyRight, forKey: nil)
我们这里调用的addAnimation(_: forKey:)方法用于将CA对象创建一个拷贝并且应用在layer上,第二个参数forKey仅仅用于动画的使用者,通过这个参数可以实现改变、停止这个动画等操作。