UIImagePickerControllerで写真と動画どちらも撮れるようにする方法

公開: 2016-11-22 07:39

こんにちはあっきぃです。

最近ブルジョワ犬こと、ボルゾイと絡みました。

見かけによらずキュートな奴でした。飼いたい。。



ということで、
「UIImagePickerControllerで写真も動画も撮れるようにしよう!」のコーナーです。



1.UIImagePickerControllerで写真も動画も撮れるようにする方法

ざっと示すとこんな感じ。

// カメラで撮影
UIImagePickerController *vc = [UIImagePickerController new];
vc.sourceType = UIImagePickerControllerSourceTypeCamera;
vc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
vc.videoQuality = UIImagePickerControllerQualityTypeHigh;
vc.delegate = self;
[self.navigationController presentViewController:vc animated:YES completion:nil];

3行目のmediaTypesのところの

vc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

これで、使用できるすべてのSourceTypeが指定できます。

(ビデオ対応してなければビデオは撮れませぬ。)


あと動画の場合は4行目の

vc.videoQuality = UIImagePickerControllerQualityTypeHigh;

で、画質をあげたほうが綺麗です。(この辺は仕様と相談だ!)





2.UIImagePickerControllerでカメラロールからも写真も動画も選択できるようにする

カメラはもちろん、カメラロールからも選択したいですよね。

その場合はこんな感じ。

// カメラロールから
UIImagePickerController *vc = [UIImagePickerController new];
vc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
vc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
vc.videoQuality = UIImagePickerControllerQualityTypeHigh;
vc.delegate = self;
[self.navigationController presentViewController:vc animated:YES completion:nil];

カメラからとほぼ同じです。

違うのは2行目の

vc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

sourceTypeがUIImagePickerControllerSourceTypeCameraではなく、
UIImagePickerControllerSourceTypePhotoLibraryにしたところです。

これでカメラロールからの選択になります。





3.UIImagePickerControllerのDelegateでの処理

ユーザーが動画や写真を撮影、選択した後の処理です。

#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        // 画像
        if ([mediaType isEqualToString:(NSString*)kUTTypeImage]) {
                UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
                [picker dismissViewControllerAnimated:YES completion:nil];

                // なんかする

                return;
        }
        // 動画
        if ([mediaType isEqualToString:(NSString*)kUTTypeMovie]) {
                NSURL *videoUrl=(NSURL*)[info objectForKey:UIImagePickerControllerMediaURL];
                NSString *videoPath = [videoUrl path];
                [picker dismissViewControllerAnimated:YES completion:nil];

                // なんかする

                return;
        }
}

こんな感じ。


画像の場合は、UIImage。
動画の場合は、Pathが得られます。


あとは煮るなり、焼くなりお好きなようにしてください♪



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。