ios中UIImageView展現圖片的不同處理方式

原文鏈接:http://www.cnblogs.com/lovecode/archive/2011/11/27/2265275.html#commentform

iPhone圖像通常存儲在以下4個地方:

  • 相冊(PhotoAlums):用戶可以使用UIImagePickerController類提供的交互對話框從該相冊中獲取圖像。
  • 應用程序包:將圖像與可執行程序、Info.plist文件和其他資源一同存儲,用戶可以通過本地文件路徑由imageNamed:方法來讀取這些基於包的圖像。
  • 沙盒:藉助沙盒,可以將文件存儲到Documents、Library和tmp文件夾中。
  • 因特網(Internet):應用程序可通過URL資源從網上下載圖像。

圖像文件的位置決定着讀取該文件的具體方式。相冊中的圖片及其路徑無法直接從應用程序訪問,只有終端用戶能夠瀏覽和選擇圖像,使所選圖像對應用程序可用。圖像也不能由URL直接初始化。圖像源不同讀取方式也不同:

1. 從應用程序包加載圖像

UIImage類提供了一種加載應用程序包中存儲的任意圖像的簡單方法,即通過文件名及其擴展名調用imageNamed:方法。

myImage = [UIImage imageNamed:@"icon.png"];

爲避免本地圖像緩存及其有效利用內存空間的問題,還可用imageWithContentsOfFile:替換,這個方法會返回從某一具體路徑中加載的圖像,這個路徑需以參數形式提供。當然,若要從應用程序包中獲取圖像路徑,可以查詢NSBundle類爲給定資源查找路徑。示例代碼:
NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"];
myImage = [UIImage imageWithContentsOfFile:path];

2. 從沙盒加載圖像

默認情況下,每個沙盒包含3個文件夾:Documents、Library和tmp。圖像等由應用程序生成的數據通常位於Documents文件夾內。在iPhone開發中可以通過調用實用工具主目錄函數可靠地定位頂級沙盒文件夾。通過NSHomeDirectory()返回結果,我們可以向下導航一級到Documents文件夾,完全可以保證正確的位置。示例代碼:
NSString *documentsFolder()
{
     return [NSHomeDirectory()
             stringByAppendingPathComponent:@"Documents"];
}
// 加載圖像
path = [documentsFolder() stringByAppendingPathComponent:@"image.png"];
return [UIImage imageWithContentsOfFile:path];

3. 從URL資源加載圖像

UIImage類可以從NSData實例加載圖像,但它不能直接從URL字符串或NSURL對象加載圖像。因此,只能爲UIImage提供已經從URL下載的數據(即要創建由URL內容初始化的NSData實例)。

NSURL  *url = [NSURL URLWithString:@"http://www.cnblogs.com/lovecode/images/demo.jpg"];
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url];

// 類似地我們可以直接創建個類方法
// 由具體的一個URL字符串,返回通過該資源構建的UIImage
+ (UIImage *) imageFromURLString: (NSString *) urlstring
{
    return  [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlstring]]];
}

4. 從相冊加載數據

UIImagePickerController類幫助我們從iPhone相冊中選擇圖像。它提供一個獨立的視圖控制器,以模態形式呈現視圖。該控制器發回的委託消息能夠反映用戶選擇的圖像。

  • UIImagePickerControllerSourceTypePhotoLibrary 所有同步到iPhone的圖像以及包括用戶拍攝的圖片在內的任何相冊。
  • UIImagePickerControllerSourceTypeSavedPhotosAlbum 僅含相冊。
  • UIImagePickerControllerSourceTypeCamera 允許用戶使用iPhone內置的攝像頭拍照。

圖像拾取器的委託必須遵守兩個協議:UINavigationControllerDelegate和UIImagePickerControllerDelegate。在接口中一定要爲設置爲拾取器委託的對象聲明這兩個協議。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章