0%

ios-core-animation-advanced-techniques-2

寄宿图,图层中包含的图。使用contents属性添加图片。下面来研究在layer中设置图片。

首先需要一张图片,图片来自网络,是一张《海贼王》路飞的图片。本人最喜欢的动漫之一。

直接上代码:

1
2
3
4
5
6
- (void)viewDidLoad {
[super viewDidLoad];

UIImage *image = [UIImage imageNamed:@"03.jpeg"];
self.layerView.layer.contents = (__bridge id)image.CGImage;
}

图片被压扁了,通过contentsGravity属性来让图片显示正常。

1
self.layerView.layer.contentsGravity = kCAGravityResizeAspect;

改为center,图片显示如下,看起来很模糊:

1
self.layerView.layer.contentsGravity = kCAGravityCenter;

设置contentScale:

1
self.layerView.layer.contentsScale = UIScreen.mainScreen.scale;

图片超出了视图的边界,设置下面的属性来解决这个问题。

1
2
self.layerView.layer.masksToBounds = YES;

接下来是contentsRect属性:

1
2
self.layerView.layer.contentsRect = CGRectMake(0, 0, 0.5, 0.5);

在app中可以考虑图片拼合的用法。

最后是有关contentsCenter的内容,类似.9图片。

可以在Interface Builder中通过Stretching直接设置该属性。

Custom Drawing

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
CALayer *redLayer = [CALayer layer];
redLayer.frame = CGRectMake(50, 50, 200, 200);
redLayer.backgroundColor = UIColor.redColor.CGColor;
redLayer.delegate = self;
redLayer.contentsScale = UIScreen.mainScreen.scale;

[self.layerView.layer addSublayer:redLayer];
[redLayer display];
}

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
CGContextSetLineWidth(ctx, 20);
CGContextSetStrokeColorWithColor(ctx,UIColor.blueColor.CGColor);
CGContextStrokeEllipseInRect(ctx, layer.bounds);
}

使用CALayerDelegate绘制寄宿图时,超出边界的内容不进行绘制。