この「撮影」と「選択」処理を1つのクラスで扱えるとはいえ、
この2つは無理矢理統合されている感が強く、基本的にはどちらで使うかによって
呼び出し方が異なる。
撮影処理は、クラスインスタンスを確保し、モードを設定して表示するだけで良い。
シャッターや前後カメラ切り替えなど、必要なボタンなどもすべて用意してくれる。
UIImagePickerController *picker= [[UIImagePickerController alloc]init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera; // カメラを使う
// 以下↓の設定は、↑この設定の後でなければならない
picker.delegate = self;
picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; // 静止画
[self presentModalViewController:picker animated:YES];
UIImagePickerControllerはUINavigationControllerの子クラスでありそれを含んでいるが、外部のUINavigationControllerとは連結できない。
従って、上位のビューがUINavigationControllerの管理下にあったとしても、
[self.navigationController pushViewController:ビューコントローラー animated:YES];で表示するのではなく、上記のようにpresentModalViewControllerを使う。
pickerの表示は、初回のみ時間がかかる。
シャッターを押すと撮影されるが、実際の画像ができあがるまでには時間がかかるため、
できあがった時点でデリゲートが呼び出される。
-(void)imagePickerController:(UIImagePickerController *)picker_ didFinishPickingMediaWithInfo:(NSDictionary *)info
// 撮像処理(delegate)
// 写真が取得可能になったら並行動作で呼び出され、この中を走っている間、メインも走り続ける
{
// 画像はinfoから取り出す。
UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
}
(次回に続く)
0 件のコメント:
コメントを投稿