图片拉伸__resizableImageWithCapInsets:的学习

在给视图添加image的时候, 通常会遇到这样一个问题, 就是如果视图和image的大小如果不一样, 就会出现各种各样的问题. 那我们怎样才能实现图片在不变形的情况下实现展示呢?

方法:

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode

方法介绍和说明:

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode
//该方法返回的是UIImage类型的对象,即返回经该方法拉伸后的图像
//传入的第一个参数capInsets是UIEdgeInsets类型的数据,即原始图像要被保护的区域
//这个参数是一个结构体,定义如下
//typedef struct { CGFloat top, left , bottom, right ; } UIEdgeInsets;
//该参数的意思是被保护的区域到原始图像外轮廓的上部,左部,底部,右部的直线距离,参考下图
//传入的第二个参数resizingMode是UIImageResizingMode类似的数据,即图像拉伸时选用的拉伸模式,
//这个参数是一个枚举类型,有以下两种方式
//UIImageResizingModeTile, 平铺 
//UIImageResizingModeStretch, 拉伸```


该图中, 标识top, left, bottom, right 的区域为保护区, 是不可编辑的区域, 那么中间的部分就是我们拉伸的区域
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1803308-6b7d433b288d447e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###具体使用:
有图片:  Image对象尺寸为60`*`128
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1803308-bca57e03b49926aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



视图: ImageView对象尺寸为180`*`384
***
####step1: 拉伸模式
resizingMode参数为UIImageResizingModeStretch
######<1>capInsets参数为UIEdgeInsetsMake(0, 0, 0, 0)时

![33B8A539-53EC-4AB8-8665-14B8B90D120A.png](http://upload-images.jianshu.io/upload_images/1803308-e7171a883993d63e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


######<2>capInsets参数为UIEdgeInsetsMake(42, 0, 0, 0)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像上部的三分之一进行保护(即红色方块区域).其拉伸效果如图
<li>原始图像中受保护的区域(即红色方块区域)在Y轴方向保持了原比例,但在X轴方向进行了拉伸
<li>原始图像中未受保护的区域,直接按比例进行了拉伸

![D29F0C4B-3B02-4609-A390-62F8C8DDF0DD.png](http://upload-images.jianshu.io/upload_images/1803308-265d5e8da8dee64e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######<3>capInsets参数为UIEdgeInsetsMake(0,20, 0, 0)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像左部的三分之一进行保护(即红色方块区域)
<li>原始图像中受保护的区域(即红色方块区域)在X轴方向保持了原比例,但在Y轴方向进行了拉伸
<li>原始图像中未受保护的区域,直接按比例进行了拉伸

![49A999A7-FF60-4C8F-AE63-430A0CD80108.png](http://upload-images.jianshu.io/upload_images/1803308-ed8efb8a56850c3d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


######<4>capInsets参数为UIEdgeInsetsMake(42, 20, 42, 20)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像除数字5以外的区域进行保护(即两个红色方块围起来的区域)
<li>在X轴上,由于1被左边和上边的设置保护,3被右边和上边的设置保护,所以只能用中间的2来拉伸,同理最底下的7,8,9
<li>在Y轴上,由于1被左边和上边的设置保护,7被左边和下边的设置保护,所以只能用中间的4来拉伸,同理最底下的3,6,9
<li>由于5没有被保护,所以在整个剩余的空间中,用5进行拉伸填充

***

####step2: 平铺模式
resizingMode参数为resizingMode参数为UIImageResizingModeTile
######<1>capInsets参数为UIEdgeInsetsMake(0, 0, 0, 0)时
当我们向拉伸方法传入该组参数时,代表我们未对原始图像的任何区域进行保护.其平铺效果如图
在该种情况下,我们发现原始图像按比例填充了相框,因此我们将该情况当做拉伸模式下的默认状况
在之后的实验中,我们将该种状况当做参考对象,显示在界面的右下角

![719D6458-A3FF-4755-B651-4E75B3DDFC9E.png](http://upload-images.jianshu.io/upload_images/1803308-7abe8263489f50bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######<2>capInsets参数为UIEdgeInsetsMake(42, 0, 0, 0)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像上部的三分之一进行保护(即红色方块区域)
<li>原始图像中受保护的区域(即红色方块区域)在Y轴方向保持了原比例,但在X轴方向进行了平铺填充
<li>原始图像中未受保护的区域,直接按比例进行了平铺,但不包含被保护的区域(注意观察蓝色箭头所指的区域)
![84184D06-B05A-44A7-B3FC-8FBB50FA8C05.png](http://upload-images.jianshu.io/upload_images/1803308-2e974ce67c6d8549.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######<3>capInsets参数为UIEdgeInsetsMake(0,20, 0, 0)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像左部的三分之一进行保护(即红色方块区域)
<li>原始图像中受保护的区域(即红色方块区域)在X轴方向保持了原比例,但在Y轴方向进行了平铺填充
<li>原始图像中未受保护的区域,直接按比例进行了平铺,但不包含被保护的区域(注意观察蓝色箭头所指的区域)



![4073BA92-A6BB-45B4-A61B-AAA58B15C114.png](http://upload-images.jianshu.io/upload_images/1803308-462fca2e1ab9ddf3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

######<4>capInsets参数为UIEdgeInsetsMake(42, 20, 42, 20)时
当我们向拉伸方法传入该组参数时,代表我们对原始图像除数字5以外的区域进行保护(即两个红色方块围起来的区域)
<li>在X轴上,由于1被左边和上边的设置保护,3被右边和上边的设置保护,所以只能用中间的2来平铺,同理最底下的7,8,9
<li>在Y轴上,由于1被左边和上边的设置保护,7被左边和下边的设置保护,所以只能用中间的4来平铺,同理最底下的3,6,9
<li>由于5没有被保护,所以在整个剩余的空间中,用5进行平铺填充



![51866768-1BE9-40C5-9C39-41EC5C6FB1AD.png](http://upload-images.jianshu.io/upload_images/1803308-880a0a6afb69a874.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


原文链接:http://www.jianshu.com/p/a577023677c1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 返回一张受保护且被拉伸的图片 应用场景:聊天窗口的气泡 方法一(弃用): iOS 5.0以前使用(弃用)这个方法会...
    林安530阅读 14,998评论 1 36
  • 对于图片拉伸是移动开发中很常见的需求,在前一阵子做项目中需要做一个类似于QQ聊天气泡,这个气泡会根据文字的多少而变...
    Joy___阅读 13,953评论 27 159
  • 【墨竹的菜园】0380——行万里路,拜万人师,读万卷书,这是我给自己定的学习修行方法,而且这三条的顺序有先后:先行...
    墨竹的菜园阅读 615评论 0 2
  • 很多不平静的思绪又开始扰乱我用了很多努力才得以平息的脉搏,却因为觉得花上一些宝贵的时间去唤醒心底里那些文字近乎成了...
    路还长天会亮阅读 141评论 0 1
  • 去年暑假,我参加了一个阅读竞赛营,每天走到教室就能闻到一股浓烈的“火药味”——因为营员们分为两个队,女生...
    丫丫zyc阅读 382评论 0 0