文档章节

iOS开发技巧(系列四-图片拉伸)

召唤攻城狮
 召唤攻城狮
发布于 2014/04/12 10:33
字数 444
阅读 1043
收藏 3

我们可以通过[cell setBackgroundView:[[UIImageView alloc] initWithImage:@"xxx"]];方法设置背景,假设有一张图片名称为cell_background.png,我们用它作为cell背景图片,

//前面是一张图片,不信你拖动鼠标看看

直接使用[cell setBackgroundView:[[UIImageView alloc] initWithImage:@"cell_background"]], 那么显示的时候是比较奇怪的样子,代码如下,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    //...

    //关键代码

    cell.backgroundColor = [UIColor clearColor];

    UIImage *cellBackImage = [UIImage imageNamed:@"cell_background"];

    [cell setBackgroundView:[[UIImageView alloc] initWithImage:cellBackImage]];

    //....

}

效果如下图,

图片因为拉伸,边缘都模糊了,这不是我们想要的结果和效果。

我们使用UIImage对象的方法,来保持边缘地方不变,而只是拉伸中间的区域,这样图片就不会模糊了,修改的代码如下,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    //..

    cell.backgroundColor = [UIColor clearColor];

    UIImage *cellBackImage = [UIImage imageNamed:@"cell_background"];

    //这里是关键代码

    cellBackImage = [cellBackImage resizableImageWithCapInsets:UIEdgeInsetsMake(15, 320, 14, 0)];//(top,left,bottom,right)

    [cell setBackgroundView:[[UIImageView alloc] initWithImage:cellBackImage]];

    //...

}

我们看一下resizableImageWithCapInsets方法以及它的参数UIEdgeInset

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0); // create a resizable version of this image. the interior is tiled when drawn.


UIKIT_STATIC_INLINE UIEdgeInsets UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {

    UIEdgeInsets insets = {top, left, bottom, right};

    return insets;

}

这个就是设置要保留的边缘,这样更改代码以后,我们的效果图如下,

这样就显得正常了,看起来也舒服多了吧?

PS:最近在看一些完整的开源代码,例如Code4app上面的“内涵糗事”,其实看了别人的代码,可以突然有种想通了得感觉。上面的这个例子就是我自己在开源代码上面看见的一个细节,把抽象出来与大家共享。

© 著作权归作者所有

共有 人打赏支持
召唤攻城狮
粉丝 183
博文 53
码字总数 49671
作品 0
玉林
私信 提问
iOS使用xcode可视化图像编辑功能进行图片拉伸

iOS中可视化拉伸图片技巧 一、补充 在我的另一篇博客http://my.oschina.net/u/2340880/blog/403996中探讨了IOS拉伸图像(UIImage)的几种方法和一些小经验,这篇是一个补充,再将xcode中的另一...

珲少
2015/04/21
0
0
iOS图片拉伸技巧

纵观移动市场,一款移动app,要想长期在移动市场立足,最起码要包含以下几个要素:实用的功能、极强的用户体验、华丽简洁的外观。华丽外观的背后,少不了美工的辛苦设计,但如果开发人员不懂...

长平狐
2013/03/28
1K
0
iOS股票K线图、校园助手、适配iPhone X、版本检测等源码

iOS精选源码 快速创建menuItem控件 YHPhotoBrowser 优化的网络图片浏览 cocoaAsynSocket demo (包含客户端和服务端) SwipeMenuViewController现在支持iPhoneX和Swift4。 仿微信的提醒对话框 ...

sunnyaigd
2017/10/31
0
0
iOS 知识-常用小技巧大杂烩

打印View所有子视图 2. layoutSubviews调用的调用时机 3. NSString过滤特殊字符 4. TransForm属性 5. 去掉分割线多余15像素 6. 计算方法耗时时间间隔 7. Color颜色宏定义 8. Alert提示宏定义...

冰泪_
2016/05/26
0
0
iOS--OC--图片拉伸和尺寸变换,图片简单处理

图片拉伸和尺寸变换 图片拉伸 : - (UIImage )stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight; 一般 leftCapWidth = imageWidth .5f, top......

丶雨凡
2015/03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在React工程中使用JavaScript Barcode SDK创建Web条形码应用

基于WebAssembly构建的Dynamsoft JavaScript Barcode SDK让Web开发者能够创建适用于浏览器的高性能条码应用。这篇文章分享下如何使用React快速创建一个简单的Web条形码扫描应用。 下载 Node...

yushulx
28分钟前
1
0
java lambda笔记

c#中的lambda表达式简直不要太爽,但是感觉java的lambda和c#比有待继续提高。 先搞个筛选List集合的东西,我们先搞个集合玩玩。 List<Person> person = new ArrayList<Person>();Person p...

朝如青丝暮成雪
28分钟前
0
0
最严新规发布 网络短视频平台该如何降低违规风险?

1月9日中国网络视听节目服务协会对外正式发布了多项规范,对版权视频保护及违规内容,都进行了更加详细的标准制定,整体政策更加严格。 规范规定,网络短视频平台应当履行版权保护责任,不得...

阿里云官方博客
36分钟前
1
0
深入解读阿里云数据库POLARDB核心功能物理复制技术

日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性、稳定性和性能都非常重要。 可靠性方面,在有一个数据文件的基础全量备份后,...

zhaowei121
42分钟前
1
0
CentOS 非root 用户 使用sudo 命令免密码

1. 使用su/su - 命令进入root权限下; 2. 给/etc/sudoers文件添加写权限 chmod u+w /etc/sudoers 3.找到“root ALL=(ALL) ALL ”,在后面添加:"dba ALL=(ALL) NOPASSWD: ALL" 4.保存退出,并......

驛路梨花醉美
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部