3

UIImagePickerController を使用して iPhone のフォト アルバムまたはカメラから画像を取得するための優れたチュートリアル ( http://iphone.zcentric.com/2008/08/28/using-a-uiimagepickercontroller/ ) に従いました。問題は、チュートリアルが少し古くなっていることと、デリゲートが使用するメソッドが 3.0 以降減価償却されているとドキュメントに記載されていることです。問題は、ドキュメントが代わりに何を使用するかについての手がかりを提供できなかったことです? 非推奨の方法は次のとおりです。

– imagePickerController:didFinishPickingImage:editingInfo:

上記の方法は、次のように使用されます。

- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingImage:(UIImage*)img editingInfo:(NSDictionary*)editInfo
{

    image.image = img;
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];


}

質問:非推奨の方法の代わりに現在使用されているものは何ですか?

4

2 に答える 2

37

新しいイメージ ピッカー API の使用方法を簡単に説明します。

まず、イメージ ピッカー デリゲートとして自身を設定しているため、次のように宣言されたクラスが必要です。

@interface MyClass : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
UIImagePickerController*    imagePicker;
}
@property(nonatomic,retain) UIImagePickerController* imagePicker;

- (IBAction) takePicture:(id)sender;

@end

画像ピッカーを起動するメソッドは次のようになります。ここでは として宣言されているIBActionため、Interface Builder のコントロール (ボタンなど) に直接接続できます。また、iPhone を使用している場合はカメラ インターフェイスが表示され、iPod Touch ではギャラリー ピッカーが表示されることも確認します。

#import <MobileCoreServices/UTCoreTypes.h>
...
@synthesize imagePicker = _imagePicker;
...

- (void) takePicture:(id)sender
{
        if (!_imagePicker) {
            self.imagePicker = [[UIImagePickerController alloc] init];
            self.imagePicker.delegate = self;
        }

        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
            NSArray* mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
            self.imagePicker.mediaTypes = mediaTypes;
        } else {
            self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
            self.imagePicker.allowsImageEditing = YES; 
        }

    [self presentModalViewController:self.imagePicker animated:YES];
}

次に、次の 2 つの方法が必要です。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 

    // MediaType can be kUTTypeImage or kUTTypeMovie. If it's a movie then you
    // can get the URL to the actual file itself. This example only looks for images.
    //   
    NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    // NSString* videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];

    // Try getting the edited image first. If it doesn't exist then you get the
    // original image.
    //
    if (CFStringCompare((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {       
        UIImage* picture = [info objectForKey:UIImagePickerControllerEditedImage];
        if (!picture)
            picture = [info objectForKey:UIImagePickerControllerOriginalImage];     

            // **You can now do something with the picture.
    }
    self.imagePicker = nil;
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
    self.imagePicker = nil;
}
于 2009-08-04T17:24:55.170 に答える
7

Appleのドキュメントを引用:

imagePickerController:didFinishPickingImage:editingInfo:

ユーザーが画像を選択したことをデリゲートに伝えます。このメソッドはオプションです。( iPhone OS 3.0 では非推奨です。 代わりに使用 してください。)imagePickerController:didFinishPickingMediaWithInfo:

于 2009-08-04T01:37:32.840 に答える