注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

眼睛想旅行

技术就是我的生命与信仰!

 
 
 

日志

 
 
关于我

精通C,C++,python,Erlang。并熟悉各种其他编程语言,用cocos2dx游戏引擎作过几个项目。会MySQL增删改查,了解OpenGL渲染原理。懂单片机,能设计数字电路系统,会画电路图和设计电路板。喜欢了解最新前沿技术,并持续关注和学习新技术。

网易考拉推荐

UIImage类中的常用拉伸方法(转)  

2014-07-26 20:34:30|  分类: ios学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、resizableImageWithCapInsets


今天做了一个温度计的应用,需要一个图,能够根据输入的数据将温度计里面的红色图片拉伸。为了达到这个效果,使用了iOS5的函数:resizableImageCapInsets:(UIEdgeInsets)Insets。

其中Insets这个参数的格式是(top,left,bottom,right),从上、左、下、右分别在图片上画了一道线,这样就给一个图片加了一个框。只有在框里面的部分才会被拉伸,而框外面的部分则不会改变。比如(20,5,10,5),意思是下图矩形里面的部分可以被拉伸,而其余部分不变。

UIImage类中的常用拉伸方法(转) - ♂苹果 - 眼睛想旅行

据说stretchableImageWithLeftCapWidth:topCapHeight这个函数也能够实现,但是在iOS5里面建议不要使用这个函数。效果如下图:UIImage类中的常用拉伸方法(转) - ♂苹果 - 眼睛想旅行

当修改了数据之后,变成这样:

UIImage类中的常用拉伸方法(转) - ♂苹果 - 眼睛想旅行

下面来看如何实现。

温度计共由三张图组成:

背景图ThermometerBackground.png:

UIImage类中的常用拉伸方法(转) - ♂苹果 - 眼睛想旅行

刻度图ThermometerCalibration:

UIImage类中的常用拉伸方法(转) - ♂苹果 - 眼睛想旅行

里面的溶液Calibration:

UIImage类中的常用拉伸方法(转) - ♂苹果 - 眼睛想旅行

首先将背景图加入superview中,再将刻度图和溶液图加入背景图中:(为简化起见,一些不必要的代码已经省略)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    //将背景图加入superview
    UIImageView *thermometerBackground = [[UIImageView alloc] initWithFrame:THERMOMETER_FRAME];
    [thermometerBackground setImage:[UIImage imageNamed:@"ThermometerBackground.png"]];
    [self.view addSubview:self.thermometerBackground];
    //将溶液图加入背景图
    UIImageView *thermometer = [[UIImageView alloc]init];
    [self.thermometerBackground addSubview:self.thermometer];
    //将刻度图加入背景图
    UIImageView *thermometerCalibration = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ThermometerCalibration.png"]];
    [self.thermometerCalibration setFrame:CGRectMake(010, thermometerBackground.frame.size.width, thermometerCalibration.image.size.height*thermometerBackground.frame.size.width/thermometerCalibration.frame.size.width)];
[self.thermometerBackground addSubview:thermometerCalibration];
然后,根据度数生成对应高度的image;
    UIImage* image = [UIImage imageNamed:@"Thermometer.png"];
    UIEdgeInsets insets = UIEdgeInsetsMake(200250);
    image = [image resizableImageWithCapInsets:insets];
    int top = 10.00+(38.00-temperature)*20.00;
    [self.thermometer setFrame:CGRectMake(0, top, self.thermometerBackground.frame.size.width, self.thermometerBackground.frame.size.height-top)];
    [self.thermometer setImage:image];

在这里,top这个变量就代表了根据度数计算出的溶液的高度。

这样,当改变温度temperature的大小时,只要在viewWillAppear里调用这段代码,就能够动态生成温度计图片了。


二、stretchableImageWithLeftCapWidth


- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:

(NSInteger)topCapHeight

这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度。根据设置的宽度和高度,将接下来的一个像素进行左右扩展和上下拉伸。

注意:可拉伸的范围都是距离leftCapWidth后的1竖排像素,和距离topCapHeight后的1横排像素。

参数的意义是,如果参数指定10,5。那么,图片左边10个像素,上边5个像素。不会被拉伸,x坐标为11和一个像素会被横向复制,y坐标为6的一个像素会被纵向复制。

注意:只是对一个像素进行复制到一定宽度。而图像后面的剩余像素也不会被拉伸。

1
2
3
4
5
UIImage *img=[UIImage imageNamed:@"bubbleSelf.png"];
img=[img stretchableImageWithLeftCapWidth:15 topCapHeight:12];
UIImageView *imgView=[[UIImageView alloc]initWithImage:img];
[imgView setFrame:CGRectMake(1010200200)];
[self. view addSubview:imgView];
UIImage类中的常用拉伸方法(转) - ♂苹果 - 眼睛想旅行

转自:http://www.beauty-soft.net/blog/ceiba/Ios/20130516/641.html


  评论这张
 
阅读(300)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017