iOS

iOS-CALayer

2016-10-25  本文已影响113人  哔哩哔哩智能喵

什么是CALayer

View的主层和UIImageView content层

UIView和CALayer的区别

对比CALayer,UIView多了个一个事件处理的功能。也就是,CALayer不能处理用户的触摸事件,但是UIView可以
UIView可以通过subviews属性访问所有的子视图,类似地,CALayer也可以通过sublayers属性访问所有的子层
UIView可以通过superview属性访问父视图,类似地,CALayer也可以通过superlayer属性访问父层

CALayer和QuartzCore的区别

CALayer是地应在QuartzCore框架中的
CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的
UIColor、UIImage是定义在UIKit框架中的
其次QuartzCore框架和CoreGraphics可以跨平台使用,在iOS和 Mac OS上都能使用
UIKit只限在iOS中使用

position和anchorPoint

CALayer 有两个非常关键的属性position和anchorPoin

position可以用来设置CALayer在父层中的位置,它是以父层的左上角为坐标原点(0, 0)
anchorPoint称为"定位点,锚点",它决定着CALayer身上的哪个点会在position属性所指的位置。它的x、y取值范围都是0~1,默认值为(0.5, 0.5)
position和anchorPoint属性都是CGPoint类型的

anchorPoint(示意图)

anchorPoint是(0.5,0.5)
anchorPoint是(1, 1)
anchorPoint是(0.5,0)
anchorPoint是(1,0.5

position和anchorPoint

position和anchorPoint 红色图层的anchorPoint是(0.5,0.5)
position和anchorPoint 红色图层的anchorPoint是(0.5,0)
position和anchorPoint 红色图层的anchorPoint是(0,0)
position和anchorPoint 红色图层的anchorPoint是(1,0.5)
position和anchorPoint 红色图层的anchorPoint是(1,1)

隐式动画

每一个UIView内部都默认关联着一个CALayer,这个Layer可以成为Root Layer(根层)。所有非Root Layer,也就是手动创建的CALayer对象。
当对非Root Layer的部分属性进行相应的修改时,默认会自动产生一些动画效果,这些属性称为Animatable Properties(可动画属性)。
隐式动画demo

核心动画

  • Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。

CAAnimation 简介

  • 基本属性介绍

CAPropertyAnimation

  • CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:
- CABasicAnimation
- CAKeyframeAnimation
CABasicAnimation *anim = [CABasicAnimation animation];
    //描述修改哪个属性产生的动画
    anim.keyPath = @"transform.scale";
    //设置属性的值
    anim.toValue = @.4;
    
    // 设置动画完成的时候不要移除动画
    anim.removedOnCompletion = NO;
    // 设置动画执行完成要保持最新的效果
    anim.fillMode = kCAFillModeForwards;
    
    //添加动画到layer上
    [self.yellowView.layer addAnimation:anim forKey:nil];
#define angle2Radion(angle) (angle / 180.0 * M_PI)
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    anim.keyPath = @"transform.rotation";
    
    anim.values = @[@(angle2Radion(-5)),@(angle2Radion(5)),@(angle2Radion(-5))];
    anim.duration = 0.5;
    anim.repeatCount = MAXFLOAT;
    [self.grayView.layer addAnimation:anim forKey:nil];
    
    ```
- CATransition转场动画 实例
> ● CATransition是CAAnimation的子类,用于做转场动画,能够为层提供 移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少 一点
● UINavigationController就是通过CATransition实现了将控制器的视图推 入屏幕的动画效果
● 动画属性:
● type:动画过渡类型
● subtype:动画过渡方向
● startProgress:动画起点(在整体动画的百分比) 
● endProgress:动画终点(在整体动画的百分比)


![CATransition.type 对应的动画效果](https://img.haomeiwen.com/i1514503/bc04737d03c57dff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
[转场动画demo](https://github.com/liuxingchen930831/UI-19-CATransition)

###CAAnimationGroup 这个核心动画的作用可以把 多个动画组成一个组,可以做到多个动画一同执行

##UIView动画和核心动画的区别
- 除了上面说到的UIView可以处理用户交互 核心动画不可以处理交互以外,还有就是UIView的动画效果都是对控件做真实操作,但是核心动画只是视觉效果,具体的值并没有改变。
- 核心动画一般用于转场动画
[demo](https://github.com/liuxingchen930831/UI-19-UIViewAndCAAnimation)

[常用的animationWithKeyPath值的总结和动画的属性和说明](http://www.jianshu.com/p/02c341c748f9)
上一篇 下一篇

猜你喜欢

热点阅读