美文网首页iOS绘图与动画JC专题
iOS 核心动画 - 专用图层

iOS 核心动画 - 专用图层

作者: NSLogHome | 来源:发表于2016-03-31 16:35 被阅读87次

    CAShapeLayer

    优点

    1. 渲染快速。CAShapeLayer使用了硬件加速,绘制同一图形会比用Core Graphics快很多。
    2. 高效使用内存。一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形,所以无论有多大,都不会占用太多的内存。
    3. 不会被图层边界剪裁掉。一个CAShapeLayer可以在边界之外绘制。
    4. 不会出现像素化。

    用处

    一般用 UIBezierPath 来配合做矢量图
    例: 创建一个即刻 下拉动画中 J

        UIBezierPath *path = [UIBezierPath new];
        [path moveToPoint:CGPointMake(100, 100)];
        [path addLineToPoint:CGPointMake(100, 150)];
        [path addQuadCurveToPoint:CGPointMake(70, 170) controlPoint:CGPointMake(100, 170)];
        [path addLineToPoint:CGPointMake(70, 180)];
        [path addQuadCurveToPoint:CGPointMake(110, 150) controlPoint:CGPointMake(110, 180)];
        [path addLineToPoint:CGPointMake(110, 100)];
        [path closePath];
    
        CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
        shapeLayer.fillColor = [UIColor lightGrayColor].CGColor;
        shapeLayer.strokeColor = [UIColor clearColor].CGColor;
        shapeLayer.path = path.CGPath;
    
    

    CATextLayer

    优点

    1.它以图层的形式包含了UILabel几乎所有的绘制特性,并且额外提供了一些新的特性
    2.CATextLayer也要比UILabel渲染得快得多,并且 CATextLayer 使用Core text

    要点

    1. 注意 contentsScale, 得手动地设置CATextLayercontentsScale属性
    textLayer.contentsScale = [UIScreen mainScreen].scale;
    
    1. font属性不是一个UIFont类型,而是一个CFTypeRef类型,意味着可以使用CTFontRef类型(Core Text字体)
    2. string属性并不是NSString类型,而是id类型。既可以用NSString也可以用NSAttributedString来指定文本;

    CATransformLayer(只是粗略的读了读。。。ORZ)

    优点

    不平面化它的子图层,所以它能够用于构造一个层级的3D结构;

    CAGradientLayer

    用处

    主要用来做渐变效果;

    用法

    1. startPointendPoint属性,他们决定了渐变的方向。这两个参数是以单位坐标系进行的定义,所以左上角坐标是{0, 0},右下角坐标是{1, 1};
    2. 基础渐变
      CAGradientLayer *gradientLayer = [CAGradientLayer layer];
      gradientLayer.frame = self.containerView.bounds;
      [view.layer addSublayer:gradientLayer];
    
      //设置 colors(两种)(CGColorRef 类型)
      gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor blueColor].CGColor];
      
      //设置起始和结束
      gradientLayer.startPoint = CGPointMake(0, 0);
      gradientLayer.endPoint = CGPointMake(1, 1);
    
    1. 多重渐变
    
      CAGradientLayer *gradientLayer = [CAGradientLayer layer];
      gradientLayer.frame = self.containerView.bounds;
      [view.layer addSublayer:gradientLayer];
    
      //设置多个color
      gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id) [UIColor yellowColor].CGColor, (__bridge id)[UIColor greenColor].CGColor];
    
      // 在colors > 2 的时候需要设置,相当于告诉系统分界点。。 必须于 colors.count 相等
      gradientLayer.locations = @[@0.0, @0.25, @0.5];
      
      gradientLayer.startPoint = CGPointMake(0, 0);
      gradientLayer.endPoint = CGPointMake(1, 1);
    

    CAReplicatorLayer

    用处

    1. 重复图层
    2. 反射: 创建类似水中投影的效果
      CAReplicatorLayer *layer = (CAReplicatorLayer *)self.layer;
      layer.instanceCount = 2;
      [view addSublayer:layer];
    
      //将复制图层放置在正下方
      CATransform3D transform = CATransform3DIdentity;
      CGFloat verticalOffset = view.bounds.size.height + 2;
      transform = CATransform3DTranslate(transform, 0, verticalOffset, 0);
      transform = CATransform3DScale(transform, 1, -1, 0);
      layer.instanceTransform = transform;
      // 设置透明度
      layer.instanceAlphaOffset = -0.6;
    
    1. 实现声波和涟漪效果 具体看 https://github.com/94haox/DWRipplesLayer

    CAScrollLayer (于UIScrollView相似)

    注意

    不负责将触摸事件转换为滑动事件,既不渲染滚动条,也不实现任何iOS指定行为例如滑动反弹;

    CATiledLayer

    用处

    将一个大图裁切成许多小的图片,减少内存的消耗;(主要和CAScrollLayer搭配)

    CAEmitterLayer(只是粗略的读了读。。。ORZ)

    用处

    1.粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。

    相关文章

      网友评论

        本文标题:iOS 核心动画 - 专用图层

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