iOS 开发中的动画 CoreAnimation

前面iOS 开发动画 View Animation讲的都是基于 UIView 的系统封装的高级 API。CoreAnimation 是在 Layer层上操作添加动画,可以做出更复杂的动画。

UIView 和 CALayer 的区别:

(1) UIView 是继承自 UIResponse,可以处理响应事件,CALayer 是继承自 NSObject,只负责内容的创建和绘制。
(2) UIView 负责内容的管理,CALayer 负责内容的绘制。
(3) UIView 的位置属性 frame bounds center 而 CALayer除了这些属性之外还有 anchorPoint position
(4) CALayer 可以实现 UIView 很多无法实现的功能

注意:CoreAnimation 的动画执行过程都是在后台执行的,不会阻塞主线程。

CABaseAnimation

常用的属性
animation.keyPath // 动画操作的属性
animation.toValue // 属性值的最终值
animation.duration // 动画执行的时间
animation.fillMode // 执行后的状态
animation.isRemovedOnCompletion // 动画执行后要不要删除
动画的类型
1.平移动画: position  transform.translation.x transform.translation.y transform.translation.z
2.旋转动画: transform.rotation  transform.rotation.x   transform.rotation  transform.rotation.y
3.缩放动画: bounds  transform.scale  transform.scale.x  transform.scale.y
4.颜色动画:backgroundColor borderColor
5.淡入淡出:opacity
6.高级动画:(圆角)cornerRadius (边框) borderWidth (阴影)shadowOffse

CABaseAnimation选择其一 keyPath 作为例子
阴影动画

override func viewDidLoad() {
        super.viewDidLoad()
        redView.layer.shadowColor = UIColor.black.cgColor
        redView.layer.shadowOpacity = 0.5
        let animation = CABasicAnimation()
        animation.keyPath = "shadowOffset"
        animation.toValue = NSValue(cgPoint: CGPoint(x: 10, y: 10))
        animation.duration = 2.0
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        redView.layer.add(animation, forKey: nil)
    }

CAKeyframeAnimation

新增几个属性
path:运动的路线
values: 关键帧(如果设置了 path,values 是被忽略的)
keyTimes:为对应的关键帧指定的时间点,范围是0~1的

    // 1.创建动画对象
    CAKeyframeAnimation * anim = [CAKeyframeAnimation animation];

    // 2.设置动画属性
    anim.keyPath = @"position";

    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddEllipseInRect(path, NULL, CGRectMake(100, 100, 200, 200));
    anim.path = path;
    CGPathRelease(path);

    // 动画的执行节奏
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
    anim.duration = 2.0f;
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    anim.delegate = self;
    [self.redView.layer addAnimation:anim forKey:nil];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,710评论 6 30
  • 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你...
    Yiart阅读 9,282评论 3 34
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 8,363评论 1 23
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,518评论 5 13
  • 1. 同理心:情商是可以通过练习得到提升的,练习时投入的智商越大情商越高。 2. 自我认知:定期反省自己,每天找一...
    曲同宁阅读 1,332评论 0 0