2009年8月17日月曜日

「第16章 iPhoneのカメラとフォトライブラリ」のサンプルを走らせる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク


ソースコードを読む。

CameraViewController.h
@interface CameraViewController : UIViewController 
{
:
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, retain) IBOutlet UIButton *takePictureButton;
@property (nonatomic, retain) IBOutlet UIButton *selectFromCameraRollButton;
- (IBAction)getCameraPicture:(id)sender;
- (IBAction)selectExistingPicture;
@end


2つのデリゲートの実装を宣言している。またビューと2つのボタンのアウトレット、そしてボタンをタップしたときのアクションが2つある。


CameraViewController.h

初期化処理。カメラが無い場合(iPod Touch)はボタンを隠すようにしている。
- (void)viewDidLoad {
if (![UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera]) {
takePictureButton.hidden = YES;
:
}
}



"Take New Picture" もしくは "Pick from Camera Roll" を押したときの処理。
- (IBAction)getCameraPicture:(id)sender {
UIImagePickerController *picker =
[[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsImageEditing = YES;
picker.sourceType = (sender == takePictureButton) ?
UIImagePickerControllerSourceTypeCamera :
UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentModalViewController:picker animated:YES];
[picker release];

}


UIImagePickerController のインスタンスを作り、デリゲート等プロパティを設定する。
押されたボタンの種類によってソースをカメラもしくはフォトアルバムのいずれかに切り替えている。
そして最後に presentModalViewController:animated: へ UIImagePickerController を渡す。
なるほど。これによって、例えば "Take New Picture" を押した場合、カメラのビューが下からずずずっとスライドしてくる動作になるのか。

ADCリファレンスを見るとモーダルビューへのアニメーションの種類を modalTransitionStyle で制御できるらしい。
試しに UIImagePickerController の modalTransitionStyle を UIModalTransitionStyleFlipHorizontal に設定してみた。
picker.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;


すると今度は水平方向にパネルが回転するようなアニメーションでカメラのビューに切り替わった。

カメラでの撮影、もしくはフォトアルバムからの選択が終わるとデリゲートメソッドが呼ばれる。
- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo {
imageView.image = image;
[picker dismissModalViewControllerAnimated:YES];

}

画像が UIImage として渡されるのでこれを表示用ビューへ設定する。最後に dismissModalViewControllerAnimated: でカメラのビューを消す。

キャンセル時にもデリゲートメソッドが呼ばれるのでカメラビューをキャンセル。
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

[picker dismissModalViewControllerAnimated:YES];
}



参考本:はじめてのiPhoneプログラミング

0 件のコメント:

コメントを投稿