圖像,聲音和視頻資源
OS X和iOS平臺的建立是為了提供豐富的多媒體體驗。為了支持這種經(jīng)驗携栋,這兩個平臺為您的應用程序中加載和使用圖像,聲音和視頻資源提供了大量支持咳秉。圖像資源通常用于繪制應用程序用戶界面的部分婉支。聲音和視頻資源的使用頻率較低,但也可以增強應用程序的基本外觀和吸引力澜建。以下部分描述了在應用程序中處理圖像向挖,聲音和視頻資源的支持。
Nib文件中的圖像和聲音
使用Xcode炕舵,您可以從nib文件中引用應用程序的聲音和圖像文件何之。您可以這樣做,將這些圖像或聲音與視圖或控件的不同屬性相關聯(lián)咽筋。例如溶推,您可以將默認圖像設置為在圖像視圖中顯示,或將圖像設置為顯示按鈕晤硕。在nib文件中創(chuàng)建這樣一個連接可以節(jié)省您在加載nib文件時稍后進行連接的麻煩悼潭。
要在nib文件中使圖像和聲音資源可用,您需要做的就是將它們添加到Xcode項目中; Xcode然后在庫窗格中列出它們舞箍。當您連接到給定的資源文件時舰褪,Xcode在nib文件中記錄該連接。在加載時疏橄,nib加載代碼在項目包中查找該資源占拍,在構建時應該由Xcode放置略就。
加載包含圖像和聲音資源引用的nib文件時,nib加載代碼盡可能高速緩存資源晃酒,以便以后輕松檢索表牢。例如,加載nib文件后贝次,您可以使用NSImage或UIImage(取決于您的平臺)的imageNamed:方法檢索與該nib文件相關聯(lián)的映像崔兴。在OS X中,您可以使用NSSound的soundNamed:方法來檢索緩存的聲音資源蛔翅。
加載圖像資源
圖像資源通常用于大多數(shù)應用敲茄。即使非常簡單的應用程序使用圖像來創(chuàng)建自定義外觀的控件和視圖。 OS X和iOS為使用Objective-C對象處理圖像數(shù)據(jù)提供廣泛的支持山析。這些對象使得使用圖像圖像非常容易堰燎,通常只需要幾行代碼來加載和繪制圖像。如果您不想使用Objective-C對象笋轨,還可以使用Quartz使用基于C的界面加載圖像秆剪。以下部分描述使用每種可用技術加載圖像資源文件的過程。
在Objective-C中加載圖像
要在Objective-C中加載圖像爵政,可以使用NSImage或UIImage對象仅讽,具體取決于當前平臺。使用AppKit框架為OS X構建的應用程序使用NSImage對象加載圖像并繪制它們茂卦。為iOS構建的應用程序使用UIImage對象何什。在功能上组哩,當涉及到加載現(xiàn)有圖像資源時等龙,這兩個對象都提供了幾乎相同的行為。通過將對象指針指向應用程序包中的圖像文件來初始化對象伶贰,并且圖像對象負責加載圖像數(shù)據(jù)的詳細信息蛛砰。
清單3-1顯示了如何使用OS X中的NSImage類加載映像資源。找到映像資源(在這種情況下在應用程序包中)時黍衙,只需使用該路徑初始化映像對象泥畅。初始化后,您可以使用NSImage的方法繪制圖像琅翻,或將該對象傳遞給可以使用該對象的其他方法位仁。要在iOS中執(zhí)行完全相同的任務,您需要做的只是將NSImage的引用更改為UIImage方椎。
清單3-1加載圖像資源
NSString* imageName = [[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];
NSImage* imageObj = [[NSImage alloc] initWithContentsOfFile:imageName];
您可以使用圖像對象來打開目標平臺上支持的任何類型的圖像聂抢。每個對象通常都是一個輕量級的包裝器,用于更高級的圖像處理代碼棠众。要在當前圖形上下文中繪制圖像琳疏,您只需使用其繪圖相關方法之一即可有决。 NSImage和UIImage都有幾種以不同方式繪制圖像的方法。 NSImage類還提供額外的支持來操作您加載的圖像空盼。
有關NSImage和UIImage類的方法的信息书幕,請參閱NSImage類參考和UIImage類參考。有關NSImage類的其他功能的更多詳細信息揽趾,請參閱Cocoa繪圖指南中的圖像台汇。
使用Quartz加載圖像
如果您正在編寫基于C的代碼,則可以使用Core Foundation和Quartz調用的組合將映像資源加載到應用程序中篱瞎。 Core Foundation提供了定位圖像資源并將相應的圖像數(shù)據(jù)加載到內存中的初始支持励七。 Quartz將您加載到內存中的圖像數(shù)據(jù)轉換為可用的CGImageRef,然后您的代碼可以用來繪制圖像奔缠。
使用Quartz加載圖像有兩種方法:數(shù)據(jù)提供者和圖像源對象掠抬。數(shù)據(jù)提供者可以在iOS和OS X中使用。圖像源對象僅在OS X v10.4及更高版本中可用校哎,但利用Image I / O框架來增強數(shù)據(jù)提供者的基本圖像處理能力两波。當涉及到加載和顯示圖像資源時,這兩種技術都非常適合這項工作闷哆。只有當您希望更好地訪問與圖像相關的數(shù)據(jù)時腰奋,您才可能喜歡數(shù)據(jù)提供者的圖像源。
清單3-2顯示了如何使用數(shù)據(jù)提供者加載JPEG圖像抱怔。此方法使用Core Foundation捆綁支持來定位應用程序主包中的圖像劣坊,并獲取其中的URL。然后使用該URL創(chuàng)建數(shù)據(jù)提供者對象屈留,然后為相應的JPEG數(shù)據(jù)創(chuàng)建一個CGImageRef局冰。 (為了簡潔起見,此示例省略了任何錯誤處理代碼灌危,您自己的代碼應確保任何引用的數(shù)據(jù)結構都有效)
清單3-2使用數(shù)據(jù)提供者加載映像資源
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編程指南。有關數(shù)據(jù)提供者的參考信息勇蝙,請參閱Quartz 2D參考集合(OS X)或Core Graphics Framework Reference(iOS)沫勿。
在iOS中指定高分辨率圖像
iOS應用程序應包含高分辨率版本的圖像資源。當應用程序在具有高分辨率屏幕的設備上運行時味混,高分辨率圖像提供額外的細節(jié)产雹,并且看起來更好,因為它們不需要縮放以適應空間翁锡。您可以為應用程序包中的每個圖像資源提供高分辨率圖像蔓挖,包括圖標和啟動圖像。
要指定圖像的高分辨率版本盗誊,請創(chuàng)建一個版本时甚,其寬度和高度(以像素為單位)是原始圖像的兩倍隘弊。您可以使用圖像中的額外像素來提供更多細節(jié)。保存圖像時荒适,使用相同的基本名稱梨熙,但在基本文件名和文件擴展名之間包含字符串@ 2x。例如刀诬,如果您有一個名為MyImage.png的圖像咽扇,高分辨率版本的名稱將是MyImage@2x.png。將圖像的高分辨率和原始版本放在應用程序包中的相同位置陕壹。
當?shù)讓釉O備具有高分辨率屏幕時质欲,捆綁和圖像加載程序將自動查找?guī)в蠤 2x字符串的圖像文件。如果您將@ 2x字符串與其他修飾符相結合糠馆,則@ 2x字符串應位于任何設備修飾符之前嘶伟,但應位于所有其他修飾符之后,例如啟動方向或URL方案修飾符又碌。例如:
MyImage.png - 圖像資源的默認版本九昧。
MyImage@2x.png - 具有Retina顯示設備的圖像資源的高分辨率版本。
MyImage?iphone.png - iPhone和iPod touch的圖像版本毕匀。
MyImage@2x~iphone.png - 具有Retina顯示屏的iPhone和iPod touch設備的圖像的高分辨率版本铸鹰。
當您要加載圖像時,在代碼中指定圖像名稱時皂岔,請勿包含@ 2x或任何設備修飾符蹋笼。例如,如果您的應用程序包包含上述列表中的映像文件躁垛,則會要求一個名為MyImage.png的映像剖毯。系統(tǒng)自動確定哪個版本的圖像最合適并加載。類似地缤苫,當使用或繪制該圖像時速兔,您不必知道它是原始分辨率還是高分辨率版本。圖像繪制程序根據(jù)加載的圖像自動調整活玲。但是,如果您仍然想知道圖像是原始還是高分辨率版本谍婉,您可以檢查其縮放因子舒憾。如果圖像是高分辨率版本,它的比例因子被設置為不是1.0的值穗熬。
有關如何支持高分辨率設備的更多信息镀迂,請參閱在視圖中支持高分辨率屏幕。
數(shù)據(jù)資源文件
將應用程序的數(shù)據(jù)與代碼分離可以使以后更容易修改應用程序唤蔗。如果將應用程序的配置數(shù)據(jù)存儲在資源文件中探遵,則可以更改該配置窟赏,而無需重新編譯應用程序。數(shù)據(jù)資源文件可用于存儲任何類型的信息箱季。以下部分突出顯示了iOS和OS X支持的一些數(shù)據(jù)資源類型涯穷。
屬性列表文件
屬性列表文件是在應用程序代碼之外存儲自定義配置數(shù)據(jù)的一種方式。 OS X和iOS廣泛地使用屬性列表來實現(xiàn)功能藏雏,如用戶首選項和捆綁包的信息屬性列表文件拷况。您可以類似地使用屬性列表來存儲應用程序的私有(或公開)配置數(shù)據(jù)。
屬性列表文件本質上是一組結構化數(shù)據(jù)值掘殴。您可以以編程方式或使用屬性列表編輯器應用程序(位于/ Developer / Applications / Utilities)中創(chuàng)建和編輯屬性列表赚瘦。自定義屬性列表文件的結構完全取決于您。您可以使用屬性列表來存儲字符串奏寨,數(shù)字起意,布爾值,日期和原始數(shù)據(jù)值病瞳。默認情況下杜恰,屬性列表將數(shù)據(jù)存儲在單個字典結構中,但您可以將其他字典和數(shù)組分配為值以創(chuàng)建更多分層數(shù)據(jù)集仍源。
有關使用屬性列表的信息心褐,請參閱“Core Foundation”的“屬性列表編程指南”和“屬性列表編程主題”。
OS X數(shù)據(jù)資源文件
表4-1列出了Mac應用程序支持的其他資源文件類型笼踩。
表4-1其他資源類型
資源類型
描述
AppleScript文件
在OS X中逗爹,AppleScript術語和套件文件包含有關應用程序可腳本性的信息。 這些文件可以使用文件擴展名.sdef嚎于,.scriptSuite或.scriptTerminology掘而。 因為用于腳本應用程序的實際AppleScript命令在用戶腳本和腳本編輯器應用程序中可見,因此需要對這些資源進行本地化于购。 有關支持AppleScript的信息袍睡,請參閱AppleScript概述。
幫助文件
在OS X中肋僧,幫助內容通常由使用標準文本編輯程序創(chuàng)建并在Help Viewer應用程序中注冊的一組HTML文件組成斑胜。 (有關如何使用幫助查看器注冊的信息,請參閱Apple幫助編程指南嫌吠。)也可以將PDF文件止潘,RTF文件,HTML文件或其他自定義文檔嵌入到您的軟件包中辫诅,并使用外部應用程序打開它們凭戴,如預覽 或Safari。 有關如何打開文件的信息炕矮,請參閱Launch Services編程指南么夫。