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.有任何问题欢迎留言评论。

上一篇下一篇

猜你喜欢

热点阅读