在開始之前請先替您的專案加上 AssetsLibrary.framework,並且在對應的類別中引用此標頭檔。替專案加入 Framework 的方法請參考Xcode 4 新增 Framework 的方法一文。
關鍵方法函式
由於本範例是透過 UIImagePickerController 來取得圖片的位置,自然關鍵的方法函式就落在使用者在圖庫點選檔案之後所觸發的關鍵方法函式裡,下列的所有程式碼也都是在此方法函式中執行。
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {}
製作 Block 區塊
在使用 AssetsLibrary 取得檔案相關資訊時,會使用到兩個 Block,ALAssetsLibraryAssetForURLResultBlock 與 ALAssetsLibraryAccessFailureBlock ,它們分別代表著取得檔案的成功與失敗所觸發的方法函式。
ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset *myAsset) {
ALAssetRepresentation *representation = [myAsset defaultRepresentation];
NSLog(@"圖片名稱 : %@",[representation filename]);
NSLog(@"圖片位置 : %@",[representation url]);
NSLog(@"圖片比例 : %f",[representation scale]);
switch ([representation orientation]) {
case ALAssetOrientationUp:
NSLog(@"圖片比例 : 正向");
break;
default:
NSLog(@"圖片比例 : 非正向");
break;
}
NSLog(@"圖片方向 : %d",[representation orientation]);
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {
//失敗處理常式
};
在上述程式碼中,ALAssetRepresentation 型態內存放影像檔案的描述,像是檔案名稱、位置、方向等等,另外,你可以參考 iOS Developer Library 上的 ALAssetRepresentation Class Reference 獲得其他的檔案描述。
ps:Block 為 iOS 4.0 SDK 開始有的技術, 請參考 Blocks!你不得不學習的 iOS 4 coding 新技術!一文,或是前往 iOS Developer Library 獲得更多資訊。
使用 AssetsLibrary
在完成上述的 Block 區塊設置之後,在接下來的這個部分,我們就可以透過「關鍵方法函式」的 info 參數來取檔案在裝置內的實際位置,並且使用 AssetsLibrary 來取得檔案,其程式碼如下。
NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
[assetslibrary assetForURL:imageURL resultBlock:resultBlock failureBlock:failureBlock];
透過 AssetsLibrary 取得檔案相關資訊的執行結果 |
沒有留言:
張貼留言