图像介绍

来源:互联网 发布:led编辑软件下载 编辑:程序博客网 时间:2024/06/05 02:34
到目前为止,我们将iPhone编程的焦点主要集中在文本上。没错,我们显示过UIImage,比如说上一章中的山峰图像,但是我们只使用了最简单的方式。
iPhone实际上能提供更丰富、更引人入胜的体验。照相机、麦克风、完善的图片库和扬声器是内置在iPhone中的一些工具。本章我们将这些特性作为多媒体常规内容来介绍。我们将详细介绍图像,并简要介绍iPhone的媒体播放器以及在iPhone上播放声音。
更复杂的问题超出了本书范畴。我们将图像编辑的主题留到下一章介绍iPhone的图片库时再做介绍。对于更复杂的声音处理,我们将指引你去参考相关主题的大量Apple教程。
18.1 图像介绍
我们已经几次涉及图像使用,最早出现在第12章中,在第一个SDK例子中包含了图像。我们还总是在Interface Builder中创建UIImageView,将其附加到文件名,且无需考虑细节。
现在我们要考虑细节了。我们要来看Xcode中可用的一些选项,而不是依赖于Interface Builder的高度抽象。
深入到细节中,你会发现使用图像的过程分为两步。首先是将数据加载到UIImage中,然后通过一些方式使用UIImage。可通过两种主要的方式来使用UIImage,如图18-1所示。

图18-1 图像可以显示在UIImageView或UIView中
本节我们来探讨比较简单的使用UIImageView来显示图像的方法,18.2节将探讨更为复杂的将图像绘制到UIView后层的方式。
18.1.1 加载UIImage
UIImage类提供7种不同的方式创建图像实例。其中的4个工厂方法可能最容易使用,参见表18-1。还有一些与之等同的init方法,你可以根据自己的喜好来使用。
18-1 用于创建UIImage的工厂方法
工厂方法
概  述
imageNamed:
基于主软件包(main bundle)中的文件创建UIImage
imageWithCGImage:
从Quartz 2D对象创建UIImage,这与initWithCGImage:相同
imageWithContentsOfFile:
从你指定的完整文件路径创建UIImage,跟第16章中讨论的一样,这与initWithContentsOfFile:相同
imageWithData:
从NSData创建UIImage,这与initWithData:相同
图像数据可以是几种文件类型,包括BMP、CUR、GIF、JPEG、PNG和TIFF。本书中我们使用得最多的是JPEG(因为它们比较小)和PNG(因为它们在iPhone硬件上好看,且被加速)。也可以从Quartz 2D对象创建UIImage,这是iPhone的基本图形程序包,下一章将会介绍。创建UIImage时有一个隐含的限制:图像不应该大于1024×1024。
只要将图像导入程序中,就可以显示了。如果只愿意使用UIKit的简单方法,就会想要使用UIImageView类来显示图像。
18.1.2 绘制UIImageView
我们在显示图片时已经在程序中使用过UIImageView。现在要来讨论其工作的细节。
有两种方式初始化UIImageView。首先,可以使用initWithImage:方法,它允许你传递一个UIImage,如下所示:

另外,也可以使用基本的initWithFrame:方法,并手动修改对象的属性。表18-2展示了一些属性和方法,你对UIImageView做更多工作时很可能会用到它们。
18-2 UIImageView的一些属性和方法
方法或属性
类  型
概  述
animationDuration
属性
指定多长时间运行一次动画循环
animationImages
属性
识别图像的NSArray,以加载到UIImageView
animationRepeatCount
属性
指定运行多少次动画循环
image
属性
识别单个图像,以加载到UIImageView
startAnimating
方法
开启动画
stopAnimating
方法
停止动画
要加载普通图像,可以使用image属性,但是几乎没有理由使用它而不使用initWithImage:方法——除非你在动态改变图像。如果想要创建一组图像作为动画,那么有必要利用其他UIImage- View方法和属性。
可以将一组图像加载到UIImageView中,声明它们应该多长时间完成一次动画循环及运行的次数,并在你觉得合适的时候开始和停止循环。代码清单18-1中展示了一个简单的例子。
代码清单18-1 UIImageView允许动画循环图像
你可能想要手动加载图像,而不是通过Interface Builder进行加载,其中一个主要原因是为了利用UIImageView的动画功能。
18.1.3 在UIKit中修改图像
我们已经介绍了如何以编程方式创建图像并将它们加载到图像视图中。很显然,接下来的事情就是开始修改图像。
不幸的是,在处理UIImageView时只有有限的能力修改图像。可以基于视图的一些简单操作,做一些改变。例如,如果你调整UIImageView的大小,则它将自动调整其包含的图片的大小。同样,通过设置UIImageView的框而不是整个屏幕,来决定在哪里绘制UIImageView。你甚至可以通过使用多个UIImageView来分层多个图像。
这一切很快就会变得笨重不堪,而且你不能做任何更有趣的事情,比如说通过混合或alpha透明选项来变换图像或修改它们的堆放形式。要做这类工作(并开始堆放图片,而不只是堆放视图),需要了解Core Graphics。
UIImage提供一些简单的方式访问Core Graphics功能,无需去往Core Graphics框架(或者了解上下文或者其底层的其他复杂情况)。我们这里将简要介绍这些内容,但是Core Graphics基本上要等到下一章才介绍,那时我们主要介绍整个的Quartz 2D图形引擎。
原创粉丝点击