CALayer

以下内容主要来自:iOS核心动画高级编程

UIView是iOS系统中界面元素的基础,其本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。
注:你可以使用self.view.layer来获取root layer(它是CALayer类,不是subclass)

  1. zPosition属性
    配置遮挡属性,就是各个layer的显示次序。(比如layer1和layer2都在父视图layer上,layer1.zPostion = 1; layer2.zPostion = 0 layer1就会盖住layer2)
    CGFloat zPostion = self.view.layer.zPosition;
    self.view.layer.zPosition = 1;

  2. anchorPoint属性
    注:以自身Bounds尺寸来区分,(0.5,0.5)就是所属视图的中心点为支点。
    它主要的作用就是用来作为变换的支点(可以围绕这个支点旋转,类似钟表指针)。
    左上角、右下角,anchorPoint分为为(0,0), (1, 1),也就是说anchorPoint是在单元坐标空间(同时也是左手坐标系)中定义的,可以得出在白纸的中心点、左下角和右上角的anchorPoint为(0.5,0.5), (0,1), (1,0)。

  3. postion属性(anchorPoint默认是(0.5,0.5),所以position默认也是中心点)
    position点是相对suerLayer的,anchorPoint点是相对layer的,两者是相对不同的坐标空间的一个重合点。
    anchorPoint的默认值为(0.5,0.5),也就是anchorPoint默认在layer的中心点:
    position.x = frame.origin.x + anchorPoint.x * bounds.size.width;
    position.y = frame.origin.y + anchorPoint.y * bounds.size.height;

  4. masksToBounds属性
    位于layer之下的盖住,相当于裁剪,跟clipsToBounds一样,只是前者作用于layer,后者作用于UIView及其继承类。

  5. contents属性(类型为id)
    layer.contents = (__bridge id)image.CGImage

  6. contentsGravity属性(跟UIImageView的contentMode属性类似)
    适应视图:
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    layer.contentGravity = kCAGravityResizeAspect;
    常量:(这里常量是String,UIKit那边是枚举)
    • kCAGravityCenter
    • kCAGravityTop
    • kCAGravityBottom
    • kCAGravityLeft
    • kCAGravityRight
    • kCAGravityTopLeft
    • kCAGravityTopRight
    • kCAGravityBottomLeft
    • kCAGravityBottomRight
    • kCAGravityResize
    • kCAGravityResizeAspect
    • kCAGravityResizeAspectFill

  7. contentsScale属性
    注:CGImage没有拉伸概念,设置图层时候拉伸容易丢失像素,可以通过此属性修复
    寄宿图的像素尺寸和视图大小的比例,默认情况下为1。
    contentsScale设置为1.0,将会以每个点1个像素绘制图片,如果设置为2.0,则会以每个点2个像素绘制图片,这就是我们熟知的Retina屏幕
    self.layerView.layer.contentsScale = [UIScreen mainScreen].scale;
    通过设置contentsScale,以当前屏幕的方式渲染

  8. contentsRect属性
    默认的contentsRect是{0, 0, 1, 1}
    相关运用:拼合图片(提高内存使用,载入性能,渲染特性等等)
    用四个图片的layer设置contentRect,去掉不需要的部分

  9. contentsCenter属性
    contentsCenter其实是一个CGRect,它定义了一个固定的边框和一个在图层上可拉伸的区域

  10. CAShaperLayer和UIBezierPath搭配使用
    UIBezierPath 描绘路径
    CAShaperLayer 添加UIBezierPath的路径,addSublayer

  11. CAKeyframeAnimation 和 CABasicAnimation
    CAKeyframeAnimation:关键帧动画
    根据UIBezierPath逐帧执行
    CABasicAnimation:基本动画
    animationWithKeyPath的值(根据键值来执行动画方式)
    addAnimation:forkey: 这个方法随意起名字
    fromValue 开始值
    toValue 终了值(絶対値)
    byValue 终了值(相对值)

  12. mask属性(蒙版属性)
    此属性定义了父图层的可见区域,不仅局限于静态图!!!

  13. 组透明效果(shouldRasterize rasterizationScale属性)
    button2.layer.shouldRasterize = YES;
    button2.layer.rasterizationScale = [UIScreen mainScreen].scale;

  14. CAGradientLayer
    用来生成两种或多种颜色平滑渐变,真正好处是使用了硬件加速
    colors属性:设置渐变颜色(如果需要多种渐变颜色,只需在数组里面添加)
    gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor blueColor].CGColor];
    起点位置和终点位置
    gradientLayer.startPoint = CGPointMake(0, 0);
    gradientLayer.endPoint = CGPointMake(1, 1);
    locations属性:调整颜色空间,默认是均匀渲染
    gradientLayer.locations = @[@0.0, @0.25, @0.5];

你可能感兴趣的:(CALayer)