CALayer

作者: 月咏蝴蝶 | 来源:发表于2015-12-16 18:12 被阅读186次

    以下内容主要来自: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

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