AndroidからはじめるiOS

AndroiderがiOSアプリ開発に挑戦するメモ

iOSでカメラを使用してみる2つの方法①UIImagePickerController

Androidではカメラを使用するとき大きく分けて、Intentで標準カメラを起動する方法と、
Cameraインスタンスを使用する方法がある。
アプリの機能としてのカメラの重要度や、撮影画面にカスタムを加える必要があるかなどでこれらは使い分ける。
Androidほどではないが、iOSでカメラを使用するときにも用途に応じて大きく2つの方法がある。
iOSの公式リファレンスでは カメラ操作のプログラミング で詳しく書いてある。

①UIImagePickerControllerを使用する

この方法はiPhoneの標準カメラUIを呼び出す方法です。
AndroidのIntentで呼び出すカメラのように別のアプリを呼び出すわけではないですが、
アプリ内で動画への切り換えやフラッシュ、サイズ変更など標準的な機能も使用する事ができます。
- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
{
    if (([UIImagePickerController isSourceTypeAvailable:
          UIImagePickerControllerSourceTypeCamera] == NO)
        || (controller == nil))
        return NO;
    UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
    cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
    [controller presentViewController:cameraUI animated:YES completion:nil];
    return YES;
}
これで最低限標準のカメラが表示されるようになる。
iOSのリファレンスでは
[controller presentViewController:cameraUI animated:YES completion:nil];
の部分が
[controller presentModalViewController: cameraUI animated: YES];
になっているが、このメソッドはiOS6以降ではDupricatedになっている。

表示有無が設定できるボタンについては以下のコードで設定できる。
// ユーザが写真またはムービーのキャプチャを選択するためのコントロールを表示する
// (写真とムービーの両方が利用可能な場合)
cameraUI.mediaTypes =
    [UIImagePickerController availableMediaTypesForSourceType:
    UIImagePickerControllerSourceTypeCamera];
// 写真の移動と拡大縮小、または
 // ムービーのトリミングのためのコントロールを隠す。代わりにコントロールを表示するには、YESを
使用する。
cameraUI.allowsEditing = NO;