今天做了一个温度计的应用,需要一个图,能够根据输入的数据将温度计里面的红色图片拉伸。为了达到这个效果,使用了iOS5的函数:resizableImageCapInsets:(UIEdgeInsets)Insets。
最近终于申请到苹果开发者账号!搞的好烦啊!给大家带福利了!
想真机调试,上架应用,将IPA打包给朋友用,或者申请开发者账号的请联系我!
真机调试有99个限制!
其中Insets这个参数的格式是(top,left,bottom,right),从上、左、下、右分别在图片上画了一道线,这样就给一个图片加了一个框。只有在框里面的部分才会被拉伸,而框外面的部分则不会改变。比如(20,5,10,5),意思是下图矩形里面的部分可以被拉伸,而其余部分不变。
据说stretchableImageWithLeftCapWidth:topCapHeight这个函数也能够实现,但是在iOS5里面建议不要使用这个函数。效果如下图:
当修改了数据之后,变成这样:
下面来看如何实现。
温度计共由三张图组成:
背景图ThermometerBackground.png:
刻度图ThermometerCalibration:
里面的溶液Calibration:
首先将背景图加入superview中,再将刻度图和溶液图加入背景图中:(为简化起见,一些不必要的代码已经省略)
- //将背景图加入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(0, 10, 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(20, 0, 25, 0);
- 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里调用这段代码,就能够动态生成温度计图片了。
相关推荐
在iOS开发中,`resizableImageWithCapInsets`是一个非常重要的方法,用于创建可以拉伸的图片,以适应不同尺寸的界面元素。这个方法属于`UIImage`类,它允许开发者指定图片的哪部分应该保持不变(即“cap insets”)...
一种是通过设置UIEdgeInsets来控制图片拉伸区域,这可以通过`resizableImageWithCapInsets:`方法实现。UIEdgeInsets包含了上、下、左、右四个边的内缩量,允许更加灵活地定义哪些部分应该保持不变形。例如,对于一个...
在iOS应用开发中,图片拉伸是一项重要的技术,它能够帮助开发者在保持图像质量的同时适应不同尺寸的界面元素。本文将详细讲解如何在iOS 5.0和iOS 6.0版本中进行图片拉伸,以提高用户体验并优化资源利用。 首先,...
本文将详细讲解两种主要的图片拉伸方式:UIImageView的整体拉伸和UIImage的局部拉伸。 1. UIImageView整体拉伸: UIImageView是iOS中用于展示图像的视图控件。它提供了多种内容模式(UIViewContentMode),来控制...
在iOS开发中,自定义图片拉伸功能是一个重要的图像处理技术,它允许开发者根据需要对图片进行拉伸,以适应不同的尺寸和应用场景,同时保持图片的关键部分(如边角)不变形。这种技术通常用于创建可伸缩的背景、按钮...
在上述代码中,我们使用了`resizableImageWithCapInsets:`方法来创建一个可拉伸的图片,其中`resizingMode`参数指定拉伸模式,这里选择`.stretch`表示无限制拉伸。这样,图片的左右两侧将保持原始比例,而中间部分则...
`resizableImageWithCapInsets:`是其中的关键,它允许我们设置图片的边缘内嵌(Edge Insets),指定哪些部分是可拉伸的,哪些部分是固定不变的。Edge Insets参数是一个`UIEdgeInsets`结构体,包含了上、下、左、右四...
在iOS应用开发中,我们经常会遇到需要对图片进行拉伸以适应不同尺寸的需求,但同时又要保持图片的原始比例和重要...通过理解并熟练使用这个方法,我们可以提升iOS应用的用户体验,避免因图片拉伸变形导致的不美观问题。
自iOS 5开始,引入了`resizableImageWithCapInsets:`方法,可以更精确地定义图片的拉伸区域。通过指定UIEdgeInsets,我们可以控制图片的上下左右四个边缘的非拉伸区域。这允许我们灵活地定义哪些部分应该保持不变,...
首先,我们需要理解的是,图片拉伸通常会导致图像质量的损失,特别是当拉伸部分包含复杂细节时。因此,为了在拉伸过程中保持图像的关键区域不变形,我们会使用特定的图像处理技术,即创建一个“可拉伸区域”或“弹性...
在某些场景下,我们可能需要将图片拉伸以适应不同的尺寸,例如填充到特定的区域,如NavigationBar。这就是所谓的图片自动拉伸功能。本文将深入探讨如何在iOS中实现UIImageView的图片自动拉伸。 首先,我们要理解...
首先,我们需要理解在iOS 5之前的图片拉伸机制。在旧版iOS中,`UIImage`类提供了`stretchableImageWithLeftCapWidth:topCapHeight:`方法,允许开发者指定图片的“端盖”(end cap),即不参与拉伸的区域。这两个参数...
3. **裁剪和拉伸**:`clipToBounds`属性决定当图像超出边界时是否裁剪,而`resizableImageWithCapInsets:`方法则允许指定图像的拉伸区域。 4. **动画**:`UIImageView`可以播放一系列静态图像来实现简单的动画效果...
这可以通过`resizableImageWithCapInsets:`或`resizableImageWithCapInsets:resizingMode:`方法实现,其中`capInsets`参数定义了图片的固定边缘,`resizingMode`参数定义了拉伸方式。 4. 直接设置对象的frame中的x,...
相比于`stretchableImageWithLeftCapWidth:`, `resizableImageWithCapInsets:`提供了更灵活的拉伸控制,它可以设置图像的上下左右四个边缘的不变区。`UIEdgeInsets`类型的`capInsets`参数分别定义了上、右、下、左四...
### WPF Slider 控件源码解析 在WPF(Windows Presentation Foundation)开发中,Slider 控件是一种非常常见的用户界面元素,用于表示一个数值范围内的值,并允许用户通过拖动或点击来调整该值。...
综上所述,通过UIImage的分类,我们可以方便地实现截屏、图片拉伸、颜色生成图像和模糊处理等功能,极大地提高了开发效率。在实际应用中,可以根据项目需求进一步扩展这些分类,以满足更多图像处理的需求。
8. **性能优化**: 使用UIImage的`resizableImageWithCapInsets:`方法创建可拉伸的图片,可以减少内存消耗并提升绘制效率。对于大量图片的展示,可以考虑使用collectionView或tableView进行优化。 9. **动画效果**: ...