版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.05.07 |
前言
iOS中的视图加载可以有两种方式,一种是通过xib加载,另外一种就是通过纯代码加载。它们各有优点和好处,xib比较直观简单,代码比较灵活但是看着很多很乱,上一家公司主要风格就是用纯代码,这一家用的就是xib用的比较多。这几篇我们就详细的介绍一个xib相关知识。感兴趣的可以看上面写的几篇。
1. xib相关(一) —— 基本知识(一)
2. xib相关(二) —— 文件冲突问题(一)
3. xib相关(三) —— xib右侧标签介绍(一)
4. xib相关(四) —— 连线问题(一)
5. xib相关(五) —— 利用layout进行约束之界面(一)
6. xib相关(六) —— 利用layout进行约束之说明和注意事项(二)
7. xib相关(七) —— Storyboard中的segue (一)
8. xib相关(八) —— Size Classes(一)
9. xib相关(九) —— 几个IB修饰符(一)
10. xib相关(十) —— xib的国际化(一)
11. xib相关(十一) —— xib的高冷用法之修改视图的圆角半径、边框宽度和颜色(一)
12. xib相关(十二) —— UIStackView之基本介绍(一)
13. xib相关(十三) —— UIStackView之枚举UIStackViewDistribution使用(二)
14. xib相关(十四) —— UIStackView之UIStackViewAlignment使用(三)
15. xib相关(十五) —— UIStackView之工程实践(四)
16. xib相关(十六) —— UINib之基本介绍(一)
17. xib相关(十七) —— UINib之Introduction(二)
18. xib相关(十八) —— UINib之Nib文件(三)
19. xib相关(十九) —— UINib之Nib文件(四)
20. xib相关(二十) —— UINib之字符串资源(五)
回顾
上一篇主要讲述了UINib之字符串资源,这一篇讲述图像声音和视频资源。
Image, Sound, and Video Resources - 图像、声音和视频资源
OS X和iOS平台的构建旨在提供丰富的多媒体体验。 为了支持这种体验,这两个平台都为在应用程序中加载和使用图像,声音和视频资源提供了大量支持。 图像资源通常用于绘制应用程序用户界面的各个部分。 声音和视频资源使用较少,但也可以增强应用程序的基本外观和吸引力。 以下各节介绍了可用于在应用程序中使用图像,声音和视频资源的支持。
Images and Sounds in Nib Files - Nib文件中的图像和声音
使用Xcode,您可以从nib文件中引用应用程序的声音和图像文件。您可以这样做,将这些图像或声音与视图或控件的不同属性相关联。例如,您可以将默认图像设置为在图像视图中显示,或将图像设置为按钮进行显示。在nib文件中创建这样一个连接可以节省您在加载nib文件时必须稍后创建连接的麻烦。
要在nib文件中提供图像和声音资源,您只需将它们添加到Xcode项目中即可;然后Xcode在库窗格中列出它们。当你连接到一个给定的资源文件时,Xcode在nib文件中记录该连接。在加载时,nib加载代码在项目包中查找该资源,在构建时应该由Xcode放置该资源。
加载包含对图像和声音资源的引用的nib文件时,nib加载代码会尽可能缓存资源,以便以后轻松检索。例如,加载nib文件后,可以使用NSImage或UIImage的imageNamed:
方法(取决于您的平台)检索与该nib文件关联的图像。在OS X中,您可以使用NSSound
的soundNamed:
方法检索缓存的声音资源。
Loading Image Resources - 加载图像资源
图像资源通常用于大多数应用程序。 即使非常简单的应用程序也可以使用图像为控件和视图创建自定义外观。 OS X和iOS为使用Objective-C对象处理图像数据提供了广泛的支持。 这些对象使得使用图像非常容易,通常只需要几行代码来加载和绘制图像。 如果您不想使用Objective-C对象,则还可以使用Quartz使用基于C的界面加载图像。 以下各节介绍使用每种可用技术加载图像资源文件的过程。
1. Loading Images in Objective-C - 加载OC中的图像
要在Objective-C中加载图像,您可以使用NSImage
或UIImage
对象,具体取决于当前平台。使用AppKit框架为OS X构建的应用程序使用NSImage对象加载图像并绘制它们。为iOS构建的应用程序使用UIImage对象。在功能上,这两个对象在加载现有图像资源时提供了几乎相同的行为。您通过将对象的指针传递给应用程序包中的图像文件来初始化对象,并且该图像对象负责加载图像数据的详细信息。
Listing 3-1
显示了如何使用OS X中的NSImage类加载图像资源。找到图像资源(在本例中位于应用程序包中)后,只需使用该路径初始化图像对象即可。初始化后,可以使用NSImage的方法绘制图像,或将该对象传递给可以使用它的其他方法。要在iOS中执行完全相同的任务,您只需将NSImage的引用更改为UIImage。
Listing 3-1 Loading an image resource
NSString* imageName = [[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];
NSImage* imageObj = [[NSImage alloc] initWithContentsOfFile:imageName];
您可以使用图像对象打开目标平台上支持的任何类型的图像。 每个对象通常是一个轻量级的包装器,用于更高级的图像处理代码。 要在当前图形上下文中绘制图像,您只需使用其中一种绘图相关方法即可。 NSImage和UIImage都有以几种不同的方式绘制图像的方法。 NSImage类还为操作加载的图像提供了额外的支持。
有关NSImage和UIImage类的方法的信息,请参阅NSImage Class Reference和UIImage Class Reference。 有关NSImage类的其他功能的更多详细信息,请参阅Cocoa Drawing Guide中的Images。
2. Loading Images Using Quartz - 使用Quartz加载图像
如果您正在编写基于C的代码,则可以使用Core Foundation
和Quartz
调用的组合将图像资源加载到应用程序中。 Core Foundation为寻找图像资源并将相应的图像数据加载到内存中提供了初始支持。 Quartz将加载的图像数据存入内存,并将其转换为可用的CGImageRef
,然后您的代码可用于绘制图像。
有两种使用Quartz
加载图像的方法:数据提供者和图像源对象。数据提供程序在iOS和OS X中均可用。图像源对象仅在OS X v10.4及更高版本中可用,但可利用Image I / O框架来增强数据提供程序的基本图像处理功能。在加载和显示图像资源时,这两种技术都非常适合这项工作。唯一一次你可能比数据提供者更喜欢图像源的时候,是你想要更好地访问与图像相关的数据。
Listing 3-2
显示了如何使用数据提供者来加载JPEG图像。此方法使用Core Foundation软件包支持来在应用程序的主包中找到映像并获取它的URL。然后它使用该URL创建数据提供者对象,然后为相应的JPEG数据创建CGImageRef。 (为简洁起见,这个例子省略了任何错误处理代码,你自己的代码应该确保任何引用的数据结构都是有效的。
Listing 3-2 Using data providers to load image resources
CGImageRef MyCreateJPEGImageRef (const char *imageName);
{
CGImageRef image;
CGDataProviderRef provider;
CFStringRef name;
CFURLRef url;
CFBundleRef mainBundle = CFBundleGetMainBundle();
// Get the URL to the bundle resource.
name = CFStringCreateWithCString (NULL, imageName, kCFStringEncodingUTF8);
url = CFBundleCopyResourceURL(mainBundle, name, CFSTR("jpg"), NULL);
CFRelease(name);
// Create the data provider object
provider = CGDataProviderCreateWithURL (url);
CFRelease (url);
// Create the image object from that provider.
image = CGImageCreateWithJPEGDataProvider (provider, NULL, true,
kCGRenderingIntentDefault);
CGDataProviderRelease (provider);
return (image);
}
有关使用Quartz图像的详细信息,请参见Quartz 2D Programming Guide。 有关数据提供者的参考信息,请参阅Quartz 2D Reference Collection(OS X)
或Core Graphics Framework Reference(iOS)
。
3. Specifying High-Resolution Images in iOS - 指定iOS中高分辨率图像
iOS应用程序应该包含其图像资源的高分辨率版本。当应用程序在具有高分辨率屏幕的设备上运行时,高分辨率图像提供了额外的细节并且看起来更好,因为它们不需要缩放以适应空间。您可以为应用程序包中的每个图像资源提供高分辨率图像,包括图标和启动图像。
要指定图像的高分辨率版本,请创建一个版本,其宽度和高度(以像素为单位)是原始版本的两倍。您可以使用图像中的额外像素来提供更多细节。保存图像时,请使用相同的基本名称,但在基本文件名和文件扩展名之间包含字符串@ 2x。例如,如果您有名为MyImage.png
的图像,则高分辨率版本的名称将为MyImage@2x.png
。将图像的高分辨率和原始版本放在应用程序包中的相同位置。
当底层设备具有高分辨率屏幕时,bundle和图像加载例程会自动查找带有@ 2x字符串的图像文件。如果将@ 2x字符串与其他修饰符组合在一起,那么@ 2x字符串应位于任何设备修饰符之前,但位于所有其他修饰符之后,例如启动方向或URL scheme修饰符。例如:
-
MyImage.png
- 图像资源的默认版本。 -
MyImage@2x.png
- 具有Retina显示器的设备的图像资源的高分辨率版本。 -
MyImage〜iphone.png
- 适用于iPhone和iPod touch的图像版本。 -
MyImage@2x~iphone.png
- 具有Retina显示屏的iPhone和iPod touch设备的图像高分辨率版本。
当您想要加载图像时,请勿在代码中指定图像名称时包含@ 2x或任何设备修饰符。 例如,如果您的应用程序bundle包含上述列表中的图像文件,则会要求提供名为MyImage.png的图像。 系统会自动确定哪个版本的图像最适合并加载它。 同样,使用或绘制该图像时,您不必知道它是原始分辨率还是高分辨率版本。 图像绘制例程根据加载的图像自动调整。 但是,如果您仍然想知道图像是原始图像还是高分辨率版本,则可以检查其比例scale因子。 如果图像是高分辨率版本,则其比例因子设置为1.0以外的值。
有关如何支持高分辨率设备的更多信息,请参阅Supporting High-Resolution Screens In Views。
后记
本篇主要讲述了图像、声音和视频资源,感兴趣的给个赞或者关注~~~