Canoe

iOS核心动画实践一(Layer)

2017.06.17

Layer

contents相关属性

contents 参数,id 属性,但是实际如果赋值不是 CGImage,layer 会是空白。

    self.testView.backgroundColor = [UIColor lightGrayColor];
    self.testView.layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"Taco"].CGImage);

contentsGravity 参数,对应 UIView 的 contentMode 参数。

    self.testView.backgroundColor = [UIColor lightGrayColor];
    self.testView.layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"Taco"].CGImage);
    self.testView.layer.contentsGravity = kCAGravityResizeAspect;

contentsScale 参数,定义了寄宿图的像素尺寸和视图大小的比例,默认为1.0。contentScale 是属于高分辨率屏幕机制的一部分,用来判断在绘制图层的时候应该为寄宿图创建的空间大小和拉伸度。

    self.testView.backgroundColor = [UIColor lightGrayColor];
    self.testView.layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"Taco"].CGImage);
    self.testView.layer.contentsGravity = kCAGravityCenter;
    self.testView.layer.contentsScale = 1.0;

如图所示,我们设置的 contentScale 是1.0,但是我们的图片是@2x的图片,所以当以一个点一个像素来渲染的时候,就会放大图片。
我们修改 contentScale 的值为 image.scale 或者 [UIScreen mainScreen].scale 后。

contentRect 参数,这个参数使用了单位坐标,在 0-1 之间,是一个相对值,这个参数设置显示图层的一个子的区域。

    self.testView.backgroundColor = [UIColor lightGrayColor];
    self.testView.layer.contents = (__bridge id _Nullable)(image.CGImage);
    self.testView.layer.contentsGravity = kCAGravityResizeAspect;
    self.testView.layer.contentsRect = CGRectMake(0, 0, 0.5, 0.5);

contentCenter 参数,contentsCenter 属性只有在图片被拉伸后才会起作用,我们先写一段拉伸的代码。

    self.testView.backgroundColor = [UIColor lightGrayColor];
    self.testView.layer.contents = (__bridge id _Nullable)(image.CGImage);
    self.testView.layer.contentsGravity = kCAGravityResize;
    self.testView.layer.contentsRect = CGRectMake(0, 0, 0.5, 0.5);

然后我们加一句 self.testView.layer.contentsCenter = CGRectMake(0, 0, 0.5, 0.5); 意思就是从左上角四分之一进行全面拉伸。

Custom Drawing

我们可以使用Core Graphics直接绘制layer,通过继承UIView并实现drawRect方法来自定义绘制。

Comments
Write a Comment