UIImageView表明一个图片显示控件,它直接继承了UIView基类,没有继承UIControl,所以,UIImage只能做为图片的显示控件,不能接受用户输入,也不能与用户交互,它只是一个静态控件。ios
当程序须要使用UIImageView来显示图片时,便可直接在Interface Builder中把UIImageView拖入程序界面中,也可在程序中建立UIImageView对象。数组
建立UIImageView对象以后,接下来能够经过以下两个属性访问或设置该控件显示的图片。浏览器
p_w_picpath:访问或设置该控件显示的图片。ide
highlightedImage:访问或设置该控件处于高亮状态时显示的图片。动画
除此以外,UIImageView还可使用动画显示一组图片,使用UIImageView动画显示一组图片的属性和方法以下。ui
animationImages:访问或者设置该UIImageView须要动画显示的多张图片。该属性的值是一个NSArray对象。spa
highlightedAnimationImages:访问或者设置该UIImageView高亮状态下须要动画显示的多张图片。该属性的值是一个NSArray对象。设计
animationDuration:访问或设置该UIImageView的动画持续时间。code
animationRepeatCount:访问或设置该UIImageView的动画重复次数。对象
startAnimating:开始播放动画。
stopAnimating:中止播放动画。
isAnimating:该方法判断该UIImageView是否正在播放动画。
若是在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:不缩放图片,只显示图片的右下边区域。
利用本实例的图片浏览器能够依次查看应用中的每张图片,除此以外,还能够改变正在查看的图片的透明度,这可借助UIView的alpha属性来实现。不只如此,本图片浏览器还可经过一个小区域来查看图片的原始大小,所以,本例会定义两个UIImageView:一个用于查看图片总体,一个用于查看图片局部的细节。
建立一个Single View Application,并向界面中添加三个按钮、两个UIImageView,而后将它们摆放整齐,在Interface Builder中设计出的程序界面如图10.25所示。
为了能在程序中访问两个UIImageView控件,还须要在Interface Builder中将这两个UIImageView绑定到控制器类的IBOutlet属性:iv1和iv2,这样控制器类便可经过这两个属性来访问这两个UIImageView控件。
为了让程序能响应应用界面上的三个按钮的单击事件,还须要在Interface Builder中为这三个按钮的Touch Up Inside事件绑定IBAction事件处理方法,这些按钮分别绑定到IBAction事件处理方法为:plus:、minus:和next:。
完成界面设计以后,接下来编写该应用界面对应的控制器类的实现部分,主要就是为plus:、minus:和next:方法提供实现。
除此以外,程序还须要为UIImageView的单击事件提供响应——问题是UIImageView并未继承UIControl基类,所以,既不能在Interface Builder中为UIImageView的Touch Up Inside事件绑定IBAction事件处理方法,也不能经过代码为该控件的Touch Up Inside事件绑定事件处理方法。为了让UIImageView能响应单击事件,程序能够经过UIImageView添加手势检测器来处理单击事件。
下面是控制器类的实现部分代码。
程序清单:codes/10/10.7/UIImageViewTest/UIImageViewTest/FKViewController.m
上面程序中,在viewDidLoad方法中初始化了该程序须要显示的全部图片——将这些图片的文件名组成一个NSArray数组。除此以外,该程序还建立一个手势检测器,并为iv(第一个UIImageView控件)添加该手势检测器,该手势检测器就会负责处理该UIImageView控件上的点击事件。
接下来在plus:、minus:中的粗体字代码经过修改alpha属性来控制该控件的透明度,而next:方法中粗体字代码则经过p_w_picpath属性来控制该UIImageView所显示的图片。
该程序中的一个难点是使用CGImage来处理位图,虽然iOS提供了UIImage来表明位图,但实际上UIImage对位图的处理功能很是有限,若是须要对位图进行处理,则须要借助CGImage。第11章介绍图形、图像处理时会进一步介绍CGImage的功能和用法。
编译、运行该程序,能够看到如图10.26所示的效果。
UIImageView除了能够显示单张图片以外,还能以动画方式轮换显示多张图片,这种显示方式很是相似于幻灯片播放方式。
为了让UIImageView以动画方式显示多张图片,只要为该UIImageView的animationImages属性赋一个NSArray集合(该集合元素中都是UIImage对象),接下来设置与动画相关的一些属性,再调用UIImageView的startAnimating方法开始播放动画便可。
下面的实例将会使用UIImageView开发一个幻灯片播放器。
建立一个Single View Application,使用Interface Builder打开应用界面,并将一个UIImageView拖入该应用界面中。为了能在该应用界面对应的控制器类中访问该UIImageView控件,能够在Interface Builder中将该UIImageView绑定到该控制器类的IBOutlet属性:iv。
接下来修改该应用界面对应的控制器类的实现部分,修改后的实现部分代码以下。
程序清单:codes/10/10.7/UIImageViewTest2/UIImageViewTest2/FKViewController.m
上面程序中,粗体字代码就是设置UIImageView动画播放图片,并设置该控件的动画持续时间和动画重复次数,程序最后调用了UIImageView的startAnimating方法开始播放动画,这样便可让UIImageView开始正常播放动画。
————本文节选自《疯狂ios讲义(上)》