美文网首页
动画 (1) ----- CALayer

动画 (1) ----- CALayer

作者: fjytqiu | 来源:发表于2018-03-12 16:03 被阅读15次

    CALayer 和 UIView 联系
    CALayer的相关属性
    CALayer之隐式动画

    一. CALayer 和 UIView 联系

    1. 在iOS中,能看得见的基本上都是UIView(比如按钮、图片、文本等),而 UIView之所以能显示在屏幕上,是因为它拥有CALayer对象。

    2. 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层

    3. 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能

    4. CALayer不能处理用户的触摸事件。所以,如果显示的东西需要交互就选择UIView,不需要的话用 UIView或者CALayer都可以,后者性能会高一些,它少了事件处理的功能,更加轻量级。

    二. CALayer的相关属性

    宽、高
    @property CGRect bounds;
    
    背景颜色(CGColorRef类型)
    @property CGColorRef backgroundColor;
    
    边框颜色(CGColorRef类型)
    @property CGColorRef borderColor;
    
    边框宽度
    @property CGFloat borderWidth;
    
    圆角半径
    @property CGColorRef borderColor;
    
    内容(比如设置为图片CGImageRef)
    @property(retain) id contents;
    
    
    位置(默认指中点(0.5,0.5),随anchorPoint变化)
    @property CGPoint position;
    
    锚点(x,y的范围都是0-1),决定了position的含义
    @property CGPoint anchorPoint;
    
    
    
    形变属性
    @property CATransform3D transform;
    
    旋转
    CATransform3DMakeRotation(M_PI, 1, 0, 0);
    平移
    CATransform3DMakeTranslation(x,y,z)
    缩放
    CATransform3DMakeScale(x,y,z);
    
    可以通过KVC的方式进行设置属性.
    但是需要将CATransform3DMakeRotation(结构体)转成对象.
    🍐:
    NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
    [_imageView.layer setValue:value forKeyPath:@"transform.scale"];
    

    三. CALayer之隐式动画

    1. UIView内部默认关联着一个CALayer,可称为Root Layer(根层),而所有非Root Layer(手动创建的CALayer),都存在着隐式动画

    2. 隐式动画:
      非Root Layer的部分属性修改时,系统默认会自动产生动画效果,这样的属性(二中的属性)称为Animatable Properties(可动画属性)

    3. 隐式动画关闭(默认是开启)
      可以通过动画事务(CATransaction)关闭默认的隐式动画效果

    [CATransaction begin];
    [CATransaction setDisableActions:YES];
    self.view.layer.position = CGPointMake(15, 15);
    [CATransaction commit];
    

    备注

    CALayer是在QuartzCore框架中定义的
    CGImageRef、CGColorRef两种数据类型在CoreGraphics中定义的
    UIColor、UIImage是在UIKit中定义的

    其次
    QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用
    但是UIKit只能在iOS中使用

    为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

    相关文章

      网友评论

          本文标题:动画 (1) ----- CALayer

          本文链接:https://www.haomeiwen.com/subject/fykjfftx.html