`
dcj3sjt126com
  • 浏览: 1881997 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iPhone图片拉伸:resizableImageWithCapInsets

    博客分类:
  • IOS
 
阅读更多

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

 

 

最近终于申请到苹果开发者账号!搞的好烦啊!给大家带福利了!
真机调试上架应用将IPA打包给朋友用或者申请开发者账号的请联系我!
真机调试有99个限制!

 

 

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

据说stretchableImageWithLeftCapWidth:topCapHeight这个函数也能够实现,但是在iOS5里面建议不要使用这个函数。效果如下图:

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

下面来看如何实现。

温度计共由三张图组成:

背景图ThermometerBackground.png:

刻度图ThermometerCalibration:

里面的溶液Calibration:

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

[plain] view plaincopy
  1. //将背景图加入superview  
  2. UIImageView *thermometerBackground = [[UIImageView alloc] initWithFrame:THERMOMETER_FRAME];  
  3. [thermometerBackground setImage:[UIImage imageNamed:@"ThermometerBackground.png"]];  
  4. [self.view addSubview:self.thermometerBackground];  
  5. //将溶液图加入背景图  
  6. UIImageView *thermometer = [[UIImageView alloc]init];  
  7. [self.thermometerBackground addSubview:self.thermometer];  
  8. //将刻度图加入背景图  
  9. UIImageView *thermometerCalibration = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ThermometerCalibration.png"]];  
  10. [self.thermometerCalibration setFrame:CGRectMake(0, 10, thermometerBackground.frame.size.width, thermometerCalibration.image.size.height*thermometerBackground.frame.size.width/thermometerCalibration.frame.size.width)];  
[plain] view plaincopy
  1. [self.thermometerBackground addSubview:thermometerCalibration];  

然后,根据度数生成对应高度的image;  

[plain] view plaincopy
  1. UIImage* image = [UIImage imageNamed:@"Thermometer.png"];  
  2. UIEdgeInsets insets = UIEdgeInsetsMake(20, 0, 25, 0);  
  3. image = [image resizableImageWithCapInsets:insets];  
  4. int top = 10.00+(38.00-temperature)*20.00;  
  5. [self.thermometer setFrame:CGRectMake(0, top, self.thermometerBackground.frame.size.width, self.thermometerBackground.frame.size.height-top)];  
[plain] view plaincopy
  1. [self.thermometer setImage:image];  

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

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

分享到:
评论

相关推荐

    iOS之彻底弄懂resizableImageWithCapInsets

    在iOS开发中,`resizableImageWithCapInsets`是一个非常重要的方法,用于创建可以拉伸的图片,以适应不同尺寸的界面元素。这个方法属于`UIImage`类,它允许开发者指定图片的哪部分应该保持不变(即“cap insets”)...

    iOS图片拉伸小技巧

    一种是通过设置UIEdgeInsets来控制图片拉伸区域,这可以通过`resizableImageWithCapInsets:`方法实现。UIEdgeInsets包含了上、下、左、右四个边的内缩量,允许更加灵活地定义哪些部分应该保持不变形。例如,对于一个...

    iOS图片拉伸技巧(iOS5.0、iOS6.0)

    在iOS应用开发中,图片拉伸是一项重要的技术,它能够帮助开发者在保持图像质量的同时适应不同尺寸的界面元素。本文将详细讲解如何在iOS 5.0和iOS 6.0版本中进行图片拉伸,以提高用户体验并优化资源利用。 首先,...

    iOS图片拉伸的多种方式

    本文将详细讲解两种主要的图片拉伸方式:UIImageView的整体拉伸和UIImage的局部拉伸。 1. UIImageView整体拉伸: UIImageView是iOS中用于展示图像的视图控件。它提供了多种内容模式(UIViewContentMode),来控制...

    iOS开发之自定义图片拉伸功能

    在iOS开发中,自定义图片拉伸功能是一个重要的图像处理技术,它允许开发者根据需要对图片进行拉伸,以适应不同的尺寸和应用场景,同时保持图片的关键部分(如边角)不变形。这种技术通常用于创建可伸缩的背景、按钮...

    iOS图片拉伸的方法

    在上述代码中,我们使用了`resizableImageWithCapInsets:`方法来创建一个可拉伸的图片,其中`resizingMode`参数指定拉伸模式,这里选择`.stretch`表示无限制拉伸。这样,图片的左右两侧将保持原始比例,而中间部分则...

    iOS图片拉伸技巧小结

    `resizableImageWithCapInsets:`是其中的关键,它允许我们设置图片的边缘内嵌(Edge Insets),指定哪些部分是可拉伸的,哪些部分是固定不变的。Edge Insets参数是一个`UIEdgeInsets`结构体,包含了上、下、左、右四...

    iOS图片实现可拉伸不变形的处理操作

    在iOS应用开发中,我们经常会遇到需要对图片进行拉伸以适应不同尺寸的需求,但同时又要保持图片的原始比例和重要...通过理解并熟练使用这个方法,我们可以提升iOS应用的用户体验,避免因图片拉伸变形导致的不美观问题。

    iOS图片拉伸的4种方法

    自iOS 5开始,引入了`resizableImageWithCapInsets:`方法,可以更精确地定义图片的拉伸区域。通过指定UIEdgeInsets,我们可以控制图片的上下左右四个边缘的非拉伸区域。这允许我们灵活地定义哪些部分应该保持不变,...

    ios源码之可拉伸的图片StretchableImages.rar

    首先,我们需要理解的是,图片拉伸通常会导致图像质量的损失,特别是当拉伸部分包含复杂细节时。因此,为了在拉伸过程中保持图像的关键区域不变形,我们会使用特定的图像处理技术,即创建一个“可拉伸区域”或“弹性...

    iOS UIImageView图片自动拉伸功能

    在某些场景下,我们可能需要将图片拉伸以适应不同的尺寸,例如填充到特定的区域,如NavigationBar。这就是所谓的图片自动拉伸功能。本文将深入探讨如何在iOS中实现UIImageView的图片自动拉伸。 首先,我们要理解...

    iOS中实现图片自适应拉伸效果的方法

    首先,我们需要理解在iOS 5之前的图片拉伸机制。在旧版iOS中,`UIImage`类提供了`stretchableImageWithLeftCapWidth:topCapHeight:`方法,允许开发者指定图片的“端盖”(end cap),即不参与拉伸的区域。这两个参数...

    iphone UIFont API翻译

    3. **裁剪和拉伸**:`clipToBounds`属性决定当图像超出边界时是否裁剪,而`resizableImageWithCapInsets:`方法则允许指定图像的拉伸区域。 4. **动画**:`UIImageView`可以播放一系列静态图像来实现简单的动画效果...

    IOS开发的关于图片和frame的分类

    这可以通过`resizableImageWithCapInsets:`或`resizableImageWithCapInsets:resizingMode:`方法实现,其中`capInsets`参数定义了图片的固定边缘,`resizingMode`参数定义了拉伸方式。 4. 直接设置对象的frame中的x,...

    iOS uiimage部分截取图片

    相比于`stretchableImageWithLeftCapWidth:`, `resizableImageWithCapInsets:`提供了更灵活的拉伸控制,它可以设置图像的上下左右四个边缘的不变区。`UIEdgeInsets`类型的`capInsets`参数分别定义了上、右、下、左四...

    wpf Slider控件源码

    ### WPF Slider 控件源码解析 在WPF(Windows Presentation Foundation)开发中,Slider 控件是一种非常常见的用户界面元素,用于表示一个数值范围内的值,并允许用户通过拖动或点击来调整该值。...

    iOS图片分类

    综上所述,通过UIImage的分类,我们可以方便地实现截屏、图片拉伸、颜色生成图像和模糊处理等功能,极大地提高了开发效率。在实际应用中,可以根据项目需求进一步扩展这些分类,以满足更多图像处理的需求。

    IOS应用源码之图片展示 .rar

    8. **性能优化**: 使用UIImage的`resizableImageWithCapInsets:`方法创建可拉伸的图片,可以减少内存消耗并提升绘制效率。对于大量图片的展示,可以考虑使用collectionView或tableView进行优化。 9. **动画效果**: ...

Global site tag (gtag.js) - Google Analytics