iOS绘图与动画JC专题

iOS 核心动画 - 专用图层

2016-03-31  本文已影响87人  NSLogHome

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.粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。

上一篇下一篇

猜你喜欢

热点阅读