美文网首页
iOS CALayer contentsRect实现图片裁剪

iOS CALayer contentsRect实现图片裁剪

作者: 某非著名程序员 | 来源:发表于2019-07-21 21:58 被阅读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.有任何问题欢迎留言评论。

    相关文章

      网友评论

          本文标题:iOS CALayer contentsRect实现图片裁剪

          本文链接:https://www.haomeiwen.com/subject/oouvlctx.html