使用 UIImagePickerController 可以呼叫一個 iOS 內建的介面,先前的文章已經介紹過使用 UIImagePickerController 來截取相機拍攝的圖片或是影片,也介紹過如何將這些檔案存入裝置內建的圖庫中,現在我們則是要從裝置內建的圖庫中使用 UIImagePickerController 把這些檔案取出來。(已使用 ARC 機制)
以下是在實作此範例時,您可能會需要參考的文章連結。
- 使用 UIImagePickerController 錄製影片的方法(包含將影片存入圖庫中)
- 使用 UIImagePickerController 截取 Camera 畫面的方法
- 將影像存至相簿 Album 的方法
- 從相簿圖庫中取得影像的方法
- 使用 MPMoviePlayerController 播放影片
這裡介紹的方法是一種通用的方式,意思就是你可以從圖庫中取得相片或者是影片,在開始之前同樣為您的 Class 先新增 UIImagePickerControllerDelegate 與 UINavigationControllerDelegate 的代理方法。
接下來我們是在一個按鈕事件中實作以下程式碼,當使用者在按下按鈕時,就會呼叫一個 iOS 內建的介面供使用者選取相片或是影片。
//按下按鈕時所觸發的函式
- (IBAction)getFromLibrary:(id)sender {
//宣告一個UIImagePickerController並設定代理
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
//設定MediaType類型(不做此設定會自動忽略圖庫中的所有影片)
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:imagePicker.sourceType];
imagePicker.mediaTypes = mediaTypes;
//設定開啓圖庫的類型(預設圖庫/全部/新拍攝)
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
//以動畫方式顯示圖庫
[self presentModalViewController:imagePicker animated:YES];
}
使用 UIImagePickerController 呼叫內建圖庫的方式都是大同小異,這裡比較特別的是,如果你希望在檢視圖庫時,能同時出現影片與相片兩種類型的檔案,那麼你就必須對 MediaTypes 做設定,否則你將只會在圖庫中看到那些靜態的相片,同樣的道理你也無法使用 UIImagePickerController 來取得影影機所拍攝的影片。
另一個值得注意的地方就是在開啓圖庫的類型這裡,可以參考在 UIImagePickerController.h 中對 UIImagePickerControllerSourceType 做的定義,如下。
enum {
UIImagePickerControllerSourceTypePhotoLibrary, //圖庫中的所有資料夾
UIImagePickerControllerSourceTypeCamera, //使用相機拍攝新的照片或影片
UIImagePickerControllerSourceTypeSavedPhotosAlbum //圖庫中的預設資料夾(相機膠卷)
};
typedef NSUInteger UIImagePickerControllerSourceType;
最後,是當使用者選取他們所要的相片或是影片時,所觸發的 UIImagePickerControllerDelegate 內建函式。
//UIImagePickerController內建函式
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
//取得使用的檔案格式
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"]) {
//取得圖片
image = [info objectForKey:UIImagePickerControllerOriginalImage];
}
if ([mediaType isEqualToString:@"public.movie"]) {
//取得影片位置
videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
}
//已動畫方式返回先前畫面
[picker dismissModalViewControllerAnimated:YES];
}
在上述程式碼中,可以透過判斷 mediaType 來得知取的檔案是圖片還是影片而分別做處理,在圖片的部份直接使用一個 UIImage 變數來取得圖片,在影片的部份則是使用 NSURL 變數來記錄影片的位置。
ps:特別注意,請不要在 UIImagePickerController 內建函式中撰寫任何撥放影片的程式碼(包含呼叫播放影片的函式),影片會無法順利播放並呈現黑色畫面,如果想要播放選取的影片,可以利用所取的的影片位置,在其它函式中實作。
沒有留言:
張貼留言