iOS CALayer contentsRect实现图片裁剪
2019-07-21 本文已影响0人
某非著名程序员
还记得小时的九宫格拼图吗?在做斗地主时,有张大图,如何切成小图。
作为一个iOS开发者,你会如何实现呢?你会让美工给你图片切成九份来做九宫格拼图吗?你会把扑克牌切成54张来做斗地主吗?
先来看下实现效果吧!
puke.jpg
代码切图
和 bounds , frame 不同, contentsRect 不是按点来计算的,它使用了单位坐标,单位坐标指定在0到1之间,是一个相对值。
代码实现:
@interface CAlayerContentsRectViewController ()
@property (nonatomic,strong) IBOutletCollection(UIView) NSArray * layerViews;
@end
@implementation CAlayerContentsRectViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImage * image = [UIImage imageNamed:@"puke"];
for (int i = 0;i<self.layerViews.count;i++) {
UIView * view = self.layerViews[i];
[self addSpriteImage:image withContentRect:CGRectMake(0.01+0.099*i, 0, 0.095, 0.25) toLayer:view.layer];
}
}
- (void)addSpriteImage:(UIImage *)image withContentRect:(CGRect)rect toLayer:(CALayer *)layer //set image
{
layer.contents = (__bridge id)image.CGImage;
//scale contents to fit
layer.contentsGravity = kCAGravityResizeAspect;
//set contentsRect
layer.contentsRect = rect;
}
拼合不仅给app提供了一个整洁的载入方式,还有效地提高了载入性能(单张大图
比多张小图载入地更快)
1.对于一类图,可以采用图片拼合,简单使用。还可优化内存,减少美工工作量。当然如果你采用CALayer的contents属性设置背景图,此方法也许能够为你解决图片拉伸方式的问题。
2.苹果的CALayer的强大远超想象,想深入了解动画,请移步<<iOS CoreAnimation>>。当然九宫格拼图,读者可自行实现。附上Demo。
3.有任何问题欢迎留言评论。