疯狂ios讲义疯狂连载之图像控件(UIImageView)

简介:

   UIImageView代表一个图片显示控件,它直接继承了UIView基类,没有继承UIControl,因此,UIImage只能作为图片的显示控件,不能接受用户输入,也不能与用户交互,它只是一个静态控件。

   当程序需要使用UIImageView来显示图片时,即可直接在Interface Builder中把UIImageView拖入程序界面中,也可在程序中创建UIImageView对象。

   创建UIImageView对象之后,接下来可以通过如下两个属性访问或设置该控件显示的图片。

image:访问或设置该控件显示的图片。

highlightedImage:访问或设置该控件处于高亮状态时显示的图片。

   除此之外,UIImageView还可以使用动画显示一组图片,使用UIImageView动画显示一组图片的属性和方法如下。

animationImages:访问或者设置该UIImageView需要动画显示的多张图片。该属性的值是一个NSArray对象。

highlightedAnimationImages:访问或者设置该UIImageView高亮状态下需要动画显示的多张图片。该属性的值是一个NSArray对象。

animationDuration:访问或设置该UIImageView的动画持续时间。

animationRepeatCount:访问或设置该UIImageView的动画重复次数。

startAnimating:开始播放动画。

stopAnimating:停止播放动画。

isAnimating:该方法判断该UIImageView是否正在播放动画。


092057_tLOg_262659.jpg

   如果在Interface Builder的用户界面设计文件中选中一个UIImageView,可以看到Xcode显示如图10.24所示的属性检查器面板。

   在图10.24所示的属性检查面板中,UIImageView所支持的三个属性的意义非常明确,此处不再赘述。实际上,UIView控件所支持的Mode属性可控制UIImageView所显示图片的缩放模式,Mode属性是一个列表框,该列表框支持如下列表项。


Scale To Fill:不保持纵横比缩放图片,使图片完全适应该UIImageView控件。

Aspect Fit:保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。

Aspect Fill:保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。

Center:不缩放图片,只显示图片的中间区域。

Top:不缩放图片,只显示图片的顶部区域。

Bottom:不缩放图片,只显示图片的底部区域。

Left:不缩放图片,只显示图片的左边区域。

Right:不缩放图片,只显示图片的右边区域。

Top Left:不缩放图片,只显示图片的左上边区域。

Top Right:不缩放图片,只显示图片的右上边区域。

Bottom Left:不缩放图片,只显示图片的左下边区域。

Bottom Right:不缩放图片,只显示图片的右下边区域。


实例1:图片浏览器


092112_COUR_262659.jpg


   利用本实例的图片浏览器可以依次查看应用中的每张图片,除此之外,还可以改变正在查看的图片的透明度,这可借助UIViewalpha属性来实现。不仅如此,本图片浏览器还可通过一个小区域来查看图片的原始大小,因此,本例会定义两个UIImageView:一个用于查看图片整体,一个用于查看图片局部的细节。

   创建一个Single View Application,并向界面中添加三个按钮、两个UIImageView,然后将它们摆放整齐,在Interface Builder中设计出的程序界面如图10.25所示。

为了能在程序中访问两个UIImageView控件,还需要在Interface Builder中将这两个UIImageView绑定到控制器类的IBOutlet属性:iv1iv2,这样控制器类即可通过这两个属性来访问这两个UIImageView控件。

   为了让程序能响应应用界面上的三个按钮的单击事件,还需要在Interface Builder中为这三个按钮的Touch Up Inside事件绑定IBAction事件处理方法,这些按钮分别绑定到IBAction事件处理方法为:plus:minus:next:

   完成界面设计之后,接下来编写该应用界面对应的控制器类的实现部分,主要就是为plus:minus:next:方法提供实现。

   除此之外,程序还需要为UIImageView的单击事件提供响应——问题是UIImageView并未继承UIControl基类,因此,既不能在Interface Builder中为UIImageViewTouch Up Inside事件绑定IBAction事件处理方法,也不能通过代码为该控件的Touch Up Inside事件绑定事件处理方法。为了让UIImageView能响应单击事件,程序可以通过UIImageView添加手势检测器来处理单击事件。

下面是控制器类的实现部分代码。


程序清单:codes/10/10.7/UIImageViewTest/UIImageViewTest/FKViewController.m

wKioL1LfJNSzzNQ7AAP_7hOYQ7s834.jpg

wKiom1LfJQ2hN2F3AAKIu06Gcvg287.jpg

上面程序中,在viewDidLoad方法中初始化了该程序需要显示的所有图片——将这些图片的文件名组成一个NSArray数组。除此之外,该程序还创建一个手势检测器,并为iv(第一个UIImageView控件)添加该手势检测器,该手势检测器就会负责处理该UIImageView控件上的点击事件。

接下来在plus:minus:中的粗体字代码通过修改alpha属性来控制该控件的透明度,而next:方法中粗体字代码则通过image属性来控制该UIImageView所显示的图片。

该程序中的一个难点是使用CGImage来处理位图,虽然iOS提供了UIImage来代表位图,但实际上UIImage对位图的处理功能非常有限,如果需要对位图进行处理,则需要借助CGImage。第11章介绍图形、图像处理时会进一步介绍CGImage的功能和用法。

编译、运行该程序,可以看到如图10.26所示的效果。

092425_tcki_262659.jpg



实例2:“幻灯片”播放器


   UIImageView除了可以显示单张图片之外,还能以动画方式轮换显示多张图片,这种显示方式非常类似于幻灯片播放方式。

   为了让UIImageView以动画方式显示多张图片,只要为该UIImageViewanimationImages属性赋一个NSArray集合(该集合元素中都是UIImage对象),接下来设置与动画相关的一些属性,再调用UIImageViewstartAnimating方法开始播放动画即可。

   下面的实例将会使用UIImageView开发一个幻灯片播放器。

   创建一个Single View Application,使用Interface Builder打开应用界面,并将一个UIImageView拖入该应用界面中。为了能在该应用界面对应的控制器类中访问该UIImageView控件,可以在Interface Builder中将该UIImageView绑定到该控制器类的IBOutlet属性:iv

   接下来修改该应用界面对应的控制器类的实现部分,修改后的实现部分代码如下。


程序清单:codes/10/10.7/UIImageViewTest2/UIImageViewTest2/FKViewController.m

wKiom1LfJUyCHtkdAAHgh_U8RAU163.jpg


   上面程序中,粗体字代码就是设置UIImageView动画播放图片,并设置该控件的动画持续时间和动画重复次数,程序最后调用了UIImageViewstartAnimating方法开始播放动画,这样即可让UIImageView开始正常播放动画。



————本文节选自《疯狂ios讲义(上)》

093031_HLKX_262659.jpg



 

本文转自 fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/1353619 ,如需转载请自行联系原作者

相关文章
|
12月前
|
人工智能 文字识别 API
iOS MachineLearning 系列(4)—— 静态图像分析之物体识别与分类
本系列的前几篇文件,详细了介绍了Vision框架中关于静态图片区域识别的内容。本篇文章,我们将着重介绍静态图片中物体的识别与分类。物体识别和分类也是Machine Learning领域重要的应用。通过大量的图片数据进行训练后,模型可以轻易的分析出图片的属性以及图片中物体的属性。
228 0
|
12月前
|
算法 API iOS开发
iOS MachineLearning 系列(3)—— 静态图像分析之区域识别
本系列的前一篇文章介绍了如何使用iOS中自带的API对图片中的矩形区域进行分析。在图像静态分析方面,矩形区域分析是非常基础的部分。API还提供了更多面向应用的分析能力,如文本区域分析,条形码二维码的分析,人脸区域分析,人体分析等。本篇文章主要介绍这些分析API的应用。
216 0
|
7月前
|
iOS开发
iOS 多个滚动控件嵌套Demo
iOS 多个滚动控件嵌套Demo
38 0
|
9月前
|
存储 缓存 iOS开发
iOS 轻量化动态图像下载缓存框架实现
日常开发过程中,图片的下载会占用大量的带宽,图片的加载会消耗大量的性能和内存,正确的使用图片显得尤为重要。 同样也经常需要在各类型控件上读取网络图片和处理本地图片,例如:UIImageView、UIBtton、NSImageView、NSButton等等。
iOS 轻量化动态图像下载缓存框架实现
|
11月前
|
iOS开发
iOS短信验证码控件,自动输入回调两次解决办法
iOS短信验证码控件,自动输入回调两次解决办法
307 0
|
12月前
|
iOS开发
IOS的UITableView控件简单使用
IOS的UITableView控件简单使用
124 0
|
人工智能 API iOS开发
iOS MachineLearning 系列(2)—— 静态图像分析之矩形识别
本系列文章将完整的介绍iOS中Machine Learning相关技术的应用。本篇文章开始,我们将先介绍一些与Machine Learning相关的API的应用。使用这些API可以快速方便的实现很多如图像识别,分析等复杂功能,且不会增加应用安装包的体积。
222 0
|
API iOS开发 Perl
iOS UIImageView文字头像,首字母缩略头像
iOS UIImageView文字头像,首字母缩略头像
iOS UIImageView文字头像,首字母缩略头像
|
iOS开发
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
127 0
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
|
iOS开发
iOS开发-加在透明视图上的控件会透明
iOS开发-加在透明视图上的控件会透明
112 0