图片拉伸 UIImage resizableImageWithCapInsets

最近遇到一个需求,要图片适应文字的长度进行拉伸,实现的效果以及原图如下图:

6EDBC4B7-162C-4D45-9553-FB89B921D32A.png
questionTextViewSearchNormal@2x.png

1、resizableImageWithCapInsets 方法介绍

如何使搜索框的长度要随着文字的长度而变化,查文档发现UIImage有个方法,可以来实现该功能

  • (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0); // create a resizable version of this image. the interior is tiled when drawn.
  • (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode
    (UIImageResizingMode) resizingMode NS_AVAILABLE_IOS(6_0); // the interior is resized according to the resizingMode

(UIEdgeInsets)capInsets用来指定需要拉伸的部分;
(UIImageResizingMode) resizingMode 拉伸的模式有两种,平铺和拉伸。 平铺是在拉大的空间中重复原图capInsets指定的部分,拉伸是拉伸capInsets所指定的区域进行填充。

设置UIEdgeInsetsMake(0, 10, 0, 2)


B734194D-34CA-4AC9-A965-A585503D1392.png

此图是平铺的效果图

ECBEE3F3-A419-4782-91A1-97209D471DC6.png

上图是拉伸的效果,可以看出放大镜已经变形。
我们改变一下UIEdgeInsetsMake(0, 30, 0, 2),这里的30差不多就是原图左边放大镜的宽度,仍旧使用拉伸方式,结果如下图

B8CB91D2-88D5-4D91-8684-1E9D9E7B449B.png

改变方式为平铺方式,UIEdgeInsetsMake(0, 30, 0, 2),结果如下:

3E1FF5E0-B8FE-47B3-B044-AE60E415B8E6.png

从图中可以看出上述两种方式都可以。

2、具体实现

整个对象是一个button, 在button上添加一个UILabel用来显示具体的文字,然后根据下面的方法计算label的宽度,该方法的具体使用就不多说,求出label的宽度之后,就可以很容易得出button的宽度。

  • (CGRect)boundingRectWithSize:(CGSize)size options: (NSStringDrawingOptions)options attributes: (nullable NSDictionary<NSString *, id> *)attributes context: (nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);
- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImage *image = [[UIImage imageNamed:@"questionTextViewSearchNormal"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 2) resizingMode:UIImageResizingModeTile];
    UIButton *button = [[UIButton alloc] init];
    
    UILabel *label = [[UILabel alloc] init];
    label.backgroundColor = [UIColor redColor];
    label.text = @"日本动漫";
    label.font = [UIFont systemFontOfSize:15];
    //计算label的宽度
    NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    textStyle.lineBreakMode = NSLineBreakByTruncatingTail;
    
    CGSize size = [label.text boundingRectWithSize:CGSizeMake(150, 20)
                                            options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                         attributes:@{NSFontAttributeName:label.font,NSParagraphStyleAttributeName:textStyle}
                                            context:nil].size;
    
    CGFloat labelW = ceil(size.width) + 1;
    label.frame = CGRectMake(30, 2, labelW, 20);
    [button addSubview:label];
    
    button.frame = CGRectMake(100, 200, image.size.width + labelW - 8, image.size.height);
    [button setBackgroundImage:image forState:UIControlStateNormal];
    [self.view addSubview:button];
    
    
}

运行的结果如下:

F06F1014-E146-4C64-89F8-6EDF5913049D.png

修改label中的文字,可以得到以下结果:

3666AA5B-3EDE-4976-AFB5-F7CFA1AEE77B.png
BB2B82FA-F66B-430D-9B3E-22349A123CDF.png

*这里需要注意一下,要将图片设置为button的backgroundImage, 设置为image无法实现拉伸效果

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

推荐阅读更多精彩内容

  • 返回一张受保护且被拉伸的图片 应用场景:聊天窗口的气泡 方法一(弃用): iOS 5.0以前使用(弃用)这个方法会...
    林安530阅读 15,504评论 1 36
  • 纵观移动市场,一款移动app,要想长期在移动市场立足,最起码要包含以下几个要素:实用的功能、极强的用户体验、华丽简...
    木马不在转阅读 509评论 0 0
  • 一、目录 1> 图片拉伸处理 2> 图片扩展名 3> 大图减小高度,图片拉伸处理 4> 点击大图,Modal出来,...
    iOS_成才录阅读 5,074评论 1 33
  • iOS目前拉伸不支持四周进行拉伸,中间部分保持不变的方法!!! iOS支持的是某个部分的拉伸。 实际使用情形1:按...
    艳晓阅读 1,554评论 6 11
  • 人一定要有一颗感恩的心,这是我在上一份行业中学到的第一件事情,也因此给我的生活带来了不少变化,其实变化还可以更大一...
    纤陌颜阅读 458评论 0 0