ソースコードを読む。
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 件のコメント:
コメントを投稿