雖然說是使用 UIImagePickerController 截取影片的方法,不如說是如何開啓 UIImagePickerController 的攝影功能,在之前的文章使用 UIImagePickerController 截取 Camera 畫面的方法一文中,我們已經能透過控制 UIImagePickerController 來產生一個 iOS 內建的攝影機框架(View),並且透過它來進行拍照,在接下來文章中,我們將改寫之前的程式碼,設定並開啓 UIImagePickerController 的 MediaTypes 功能,讓它同時也俱有攝影的功能。(已使用 ARC 機制)
首先是在建立 UIImagePickerController 的部份,增加以下兩行程式碼來開啓攝影的功能,你會發現到介面上多了可以切換照相 / 攝影的功能。
//設定MediaTypes的類型
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:imagePicker.sourceType];
imagePicker.mediaTypes = mediaTypes;
當新增上述程式碼之後先別急著執行程式,因為在增加了攝影功能之後,使用者按下「使用」這張影像時,系統並不會知道所要使用的是「圖片」還是「影片」,因此我們還需要改寫該內建還式 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info,讓它可以分別對兩種不同的格式的檔案做處理才行。
//使用代理之後才會出現的內建函式
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
//取得使用的檔案格式
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
//使用的檔案格式是圖片
if ([mediaType isEqualToString:@"public.image"]) {
//使用先前的程式碼
}
//使用的檔案格式是影片
if ([mediaType isEqualToString:@"public.movie"]) {
//取得影片的位置
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
//儲存影片於相簿中
UISaveVideoAtPathToSavedPhotosAlbum(videoURL.path, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);
}
//移除Picker
[picker dismissModalViewControllerAnimated:YES];
}
最後是我們自行建立的函式,目的是用來判斷影片是否有存入成功,如果您不想增加此判斷式,只要修改儲存影像於相簿中的程式碼片段,改寫成
UISaveVideoAtPathToSavedPhotosAlbum(videoURL.path, self, nil, nil) 即可。//自行建立判斷儲存成功與否的函式
- (void)video:(NSData *)video didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
UIAlertView *alert;
//以error參數判斷是否成功儲存影像
if (error) {
alert = [[UIAlertView alloc] initWithTitle:@"錯誤"
message:[error description]
delegate:self
cancelButtonTitle:@"確定"
otherButtonTitles:nil];
} else {
alert = [[UIAlertView alloc] initWithTitle:@"成功"
message:@"影像已存入相簿中"
delegate:self
cancelButtonTitle:@"確定"
otherButtonTitles:nil];
}
//顯示警告訊息
[alert show];
}
沒有留言:
張貼留言