10行くらいで実装できました
実装内容は大きく分けて2つ。カメラの呼び出しと、撮影した画像の保存。
これだけでした。
逆に言うと、実装したのは基本的なコトだけです。
機能の拡張は後のエントリで行います。
また、カメラ機能は実機でしか試せないようです。
(本エントリの「6.シミュレータで試すとエラーが出ると思います」を参照)。
このエントリの目次
- アプリの概要
- GitHubにソースを置きました
- モーダルビューでカメラを起動する
- 撮った写真をカメラロールに保存する
- ヘッダファイルに記述するデリゲート
- シミュレータで試すとエラーが出ると思います
- 参考にさせて頂いたサイト
- さいごに
1.アプリの概要
アプリを起動すると、モーダルビューでカメラが起動し、写真を撮れます。撮ったあとは、画面右下のボタン(「Use」ボタン)を押して画像を保存できます。
「保存完了」とアラートが出れば、カメラロールに画像が保存されています。
2.GitHubにソースを置きました
ソースはこちら3.モーダルビューでカメラを起動する
UIImagePickerController を使います。- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; //カメラを起動 [self kickCamera]; } //カメラを起動 - (void)kickCamera { UIImagePickerController *imagePickerController =[[UIImagePickerController alloc] init]; //カメラ機能を選択 imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; imagePickerController.delegate = self; //YESにしないと、UIImage(カメラで撮ったデータ) が取得できない imagePickerController.allowsEditing = YES; //モーダルビューでカメラ起動 [self presentViewController:imagePickerController animated:YES completion:nil]; }
これだけで、下記のようにカメラが使えるようになります!
何もしなくても写真撮ったりキャンセルできたりします。
viewDidAppearからカメラを起動していますが、iOS6以降の場合 viewDidLoadから起動しようとすると、
whose view is not in the window hierarchy uiimagepickerこんな感じのエラーが出て動かないようです。
ちなみに
imagePickerController.sourceTypeでカメラを指定してますが、UIImagePickerControllerSourceTypePhotoLibraryでフォトライブラリーを開いたり、 UIImagePickerControllerSourceTypeSavedPhotosAlbumでカメラロールを開いたりもできます。
4.撮った写真をカメラロールに保存する
以下が、必要なコード全てになります。読めば内容は分かると思います!
//カメラ撮影後のデリゲートメソッド - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { //撮ったデータをUIImageにセットする UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; //カメラロールに画像を保存 UIImageWriteToSavedPhotosAlbum(image, self, @selector(didFinishSavingImage:didFinishSavingWithError:contextInfo:), nil); //モーダルビューを消す [self dismissViewControllerAnimated:YES completion:nil]; } //画像保存完了後。非同期で呼ばれる - (void) didFinishSavingImage:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { //画像保存完了したよ、とアラートを出す UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"保存完了" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; }
5.ヘッダファイルに記述するデリゲート
以下のようになります。@interface CameraViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate>
6.シミュレータで試すとエラーが出ると思います
こんなエラー。*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Source type 1 not available'これは、
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;で出るエラーで、カメラのソースタイプはシミュレータだと試せないようです。
なので、実機を使いましょう!
7.参考にさせて頂いたサイト
- イメージの取得と保存 | マルタケエビス
- Custom Camera App | Part 3: Assets Library | Developers' Realm
- [iPhone SDK] NSIvalidArgumentException: Source type 1 not available | Apple Support Communities
8.さいごに
思ったより簡単にカメラ機能などが使えて感動しました!これからまだまだ改良しますので、また本ブログにまとめていこうと思います。
0 件のコメント:
コメントを投稿