iOS核心动画详解swift版---基础动画
- 创建工程,添加2个ViewController,通过rootViewController设置显示的ViewController
- 第一个ViewController实现基础动画 ####1.position动画,通过移动position移动位置 实现代码如下:
func position() {
// 声明一个基础动画
let ani = CABasicAnimation(keyPath: "position")
// 设置动画toValue,也就是要移动到那个位置
ani.toValue = NSValue(CGPoint: CGPointMake(300, 300))
// 设置动画曲线:线性/先快后慢/先慢后快等
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
// 代理
ani.delegate = self
// 设置动画结束后不移除,需要以下2个属性设置共同完成
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
// 添加动画
self.testView.layer.addAnimation(ani, forKey: nil)
}
####2.rotation动画,实现通过x,y,z轴的旋转 实现代码如下:
func rotationX() {
let ani = CABasicAnimation(keyPath: "transform.rotation.x")
ani.toValue = NSNumber.init(double: M_PI)
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
ani.delegate = self
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
self.testView.layer.addAnimation(ani, forKey: nil)
}
####3.scale动画,放大或者缩小一定的倍数 代码如下:
func scale() {
let ani = CABasicAnimation(keyPath: "transform.scale")
ani.toValue = NSNumber(int: 2)
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
ani.delegate = self
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
self.testView.layer.addAnimation(ani, forKey: nil)
}
####4.translation动画,直接移动到某个位置(与position对比) 代码如下:
func translation() {
let ani = CABasicAnimation(keyPath: "transform.translation")
ani.toValue = NSValue(CGPoint: CGPointMake(-50, -50))
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
ani.delegate = self
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
self.testView.layer.addAnimation(ani, forKey: nil)
}
####5.opacity动画,透明度/模糊度 代码如下:
func opacity() {
let ani = CABasicAnimation(keyPath: "opacity")
ani.toValue = NSNumber.init(float: 0.3)
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
ani.delegate = self
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
self.testView.layer.addAnimation(ani, forKey: nil)
}
####6.cornerRadius,borderWidth动画:设置圆角,以及边框宽度(需要设置view的layer.masksToBounds) 代码如下:
// 圆角
func cornerRadius() {
let ani = CABasicAnimation(keyPath: "cornerRadius")
ani.toValue = NSNumber.init(float: 50)
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
ani.delegate = self
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
self.testView.layer.addAnimation(ani, forKey: nil)
}
// 边框宽度
func borderWidth() {
let ani = CABasicAnimation(keyPath: "borderWidth")
ani.toValue = NSNumber.init(float: 2)
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
ani.delegate = self
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
self.testView.layer.addAnimation(ani, forKey: nil)
}
####7.contents动画,修改view的内容 代码如下:
func contents() {
let ani = CABasicAnimation(keyPath: "contents")
ani.toValue = UIImage.init(named: "12.png")?.CGImage
ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
ani.delegate = self
ani.removedOnCompletion = false;
ani.fillMode = kCAFillModeForwards;
self.testView.layer.addAnimation(ani, forKey: nil)
}
###最后是动画的代理方法
// MARK: - 代理方法
// 动画开始
override func animationDidStart(anim: CAAnimation) {
print("动画开始")
}
// 动画结束
override func animationDidStop(anim: CAAnimation, finished flag: Bool) {
print("动画结束")
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
Int64(3.0 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
self.testView.layer.removeAllAnimations()
print("删除动画")
}
}
- 最后附上github地址:iOS核心动画demo,喜欢的可以给星支持一下啦~~,另外核心动画高级篇可以参考下一篇博客:iOS核心动画高级篇