常见的按钮添加和背景设置如下:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(80, 130, 160, 44)];
[button setTitle:@”Test Button” forState:UIControlStateNormal];

// Image with without cap insets
UIImage *buttonImage = [UIImage imageNamed:@”blueButton”];

[button addTarget:self action:@selector(buttonPressed:) forControlEvents: UIControlEventTouchUpInside];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[[self view] addSubview:button];
[/crayon]

所得到的按钮会相当悲剧…

iOS5中提供了一个新的UIImage方法,resizableImageWithCapInsets:,可以将图片转换为以某一偏移值为偏移的可伸缩图像(偏移值内的图像将不被拉伸或压缩)。

用法引述如下:

resizableImageWithCapInsets:

Creates and returns a new image object with the specified cap insets.

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
Parameters
capInsets
The values to use for the cap insets. 

typedef struct {
CGFloat top, left, bottom, right;
} UIEdgeInsets; 分别表示上左下右四个方向的偏移量。于是把上面按钮的UIImage改为如下形式:

UIImage *buttonImage = [[UIImage imageNamed:@”blueButton”]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 16, 0, 16)];

可以得到如下按钮:

问题得到解决。

但是值得注意的是该方法需要至少iOS5的运行环境,因此对于需要开发支持iOS5之前的App来说是不可行的。替代方案是stretchableImageWithLeftCapWidth:topCapHeight:,但是在iOS5中,这已经是被Deprecated的方法了,而且该方法只能以1px作为重复铺满拉伸区域,无法做到类似渐变等图片效果,是存在一定局限的。

简单的说

UIImage *backButton = [[UIImage imageNamed:@”blueButton”]
resizableImageWithCapInsets:UIEdgeInsetsMake(12, 12, 12, 12)];

让图片在UIEdgeInsetsMake(12, 12, 12, 12)这个范围内拉伸,距离图片top的12像素处,buttom的12像素处内拉伸,其他区域不拉伸。

最新文章

  1. homebrew update 出现Failure while executing: git pull --quiet origin refs/heads/master:refs/remotes/origin/master解决方案
  2. phpcms v9常用方法
  3. Linux下百度云盘报 获取bdstoken失败
  4. &12-2 查找二叉搜索树
  5. convert \uXXXX String to Unicode Characters in Python3.x
  6. 实用的插件:跨浏览器复制jQuery-zclip
  7. LGLCalender (价格日历)
  8. 【剑指offer】连续子数组最大和
  9. c#怎么把byte转化成int
  10. laravel5验证码
  11. Java---多线程的加强(1)
  12. JSP的学习(3)——语法知识二之page指令
  13. ActiveMQ系列之二:ActiveMQ安装和基本使用
  14. JQuery案例二:实现全选、全不选和反选
  15. postman中常见的错误
  16. 【leetcode-66】 加一
  17. HTML5的DeviceOrientation实现微信摇一摇功能
  18. Python开发【笔记】:asyncio 定时器
  19. 【剑指offer】部分思路整理
  20. Apache和Tomcat的区别?

热门文章

  1. JavaScript初学者福利!必须收藏的24条小技巧
  2. Spark1.0.0 学习路线指导
  3. 关于Cocos2d-x中实例伸缩后的位置设置
  4. 【转】Linux内核源码分析方法
  5. 矩阵的特征值和特征向量的雅克比算法C/C++实现
  6. Building a Non-blocking TCP server using OTP principles
  7. sqlserver 字符串split
  8. mui.back()返回刷新功能
  9. Java基础-JDBC访问数据库
  10. R基本介绍