OC_图片拉伸的几种方式(拉伸、切片)

OC_图片拉伸的几种方式(拉伸、切片)


拉伸前:(假如给一个button设置一个背景图片)
[self.myButton setBackgroundImage:[UIImage imageNamed:@"004"] forState:UIControlStateNormal];

效果如下:(四周很模糊,明显给用户很渣渣的感觉)


拉伸前效果
第一种:代码拉伸,封装到了一个分类里,直接调用即可:

封装的分类方法:

/**
 *  返回一张可以随意拉伸不变形的图片
 *  @param name 图片名字
 */
+(UIImage *)stretchableImageWithImgae:(NSString *)name{

    UIImage *normal = [UIImage imageNamed:name];
    CGFloat w = normal.size.width * 0.5;
    CGFloat h = normal.size.height * 0.5;
    return [normal stretchableImageWithLeftCapWidth:w topCapHeight:h];
}

执行拉伸代码:

 UIImage *image =   [UIImage  stretchableImageWithImgae:@"004"];
[self.myButton setBackgroundImage:image forState:UIControlStateNormal];

拉伸效果图如下:


拉伸完美效果

第一种补充:resize方法(-resizableImageWithCapInsets)
该方法和第一种基本类似,但是这里不方便的地方就是预留的部分不好把握,因为要拉伸的图片大小不可控,不推荐使用,但是在这里也介绍一下。

  UIImage *image = [UIImage imageNamed:@"004"];

    CGFloat top = 10;     // 顶端预留部分
    CGFloat bottom = 10 ; // 底端预留部分
    CGFloat left = 40; // 左端预留部分
    CGFloat right = 40; // 右端预留部分
    UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);

    ///注意:拉伸之后一定要赋值回去
    image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];

    //UIImageResizingModeStretch:`拉伸`模式,通过`拉伸`Insets指定的矩形区域来填充图片
    //UIImageResizingModeTile:`平铺`模式,通过`重复显示`Insets指定的矩形区域来填充图片
    [self.myButton setBackgroundImage:image forState:UIControlStateNormal];
第二种:点击图片直接使用切片拉伸:

进入Assets.xcassets -> 选中图片


两种开始方式

拉伸方式选择

水平拉伸

垂直拉伸

拉伸的几种拉伸方式选择

拉伸切片模式

执行代码:代码里和平常一样

 UIImage *image = [UIImage imageNamed:@"004"];
 [self.myButton setBackgroundImage:image forState:UIControlStateNormal];

完美拉伸效果

第二种补充:平铺效果


平铺效果测试

平铺效果成功

第二种补充:聊天气泡效果


聊天气泡测试

聊天气泡效果成功展示

最后的两个补充,代码都是很正常的代码:

 UIImage *image = [UIImage imageNamed:@"001"];
 [self.myButton setBackgroundImage:image forState:UIControlStateNormal];

怎么样,这个切片拉伸功能强大吧?也很方便吧??推荐使用哦!


    • 0
      点赞
    • 2
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值