1

私はiPhoneカメラから画像をキャプチャして作成したアプリケーションに表示するアプリケーションを作成しています。iOS開発者ライブラリのいくつかの記事を読み、このコードを.mファイルに書き込みました。

- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
           usingDelegate: (id <UIImagePickerControllerDelegate,
                               UINavigationControllerDelegate>) delegate {

if (([UIImagePickerController isSourceTypeAvailable:
             UIImagePickerControllerSourceTypeCamera] == NO)
        || (delegate == nil)
        || (controller == nil))
    return NO;


UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;

// Displays a control that allows the user to choose picture or
// movie capture, if both are available:
cameraUI.mediaTypes =
    [UIImagePickerController availableMediaTypesForSourceType:
        UIImagePickerControllerSourceTypeCamera];

// Hides the controls for moving & scaling pictures, or for
// trimming movies. To instead show the controls, use YES.
cameraUI.allowsEditing = NO;

cameraUI.delegate = delegate;

[controller presentModalViewController: cameraUI animated: YES];
return YES;
}

このコードにリンクされたボタンも作成しました。この関数を呼び出しますが、コントロールは上記の関数に渡されません。

- (IBAction) showCameraUI {
[self startCameraControllerFromViewController: self
                                usingDelegate: self];
}

そして、私はこのコードが機能するかどうかもわかりません

誰かがもっと良い考えを持っていますか?ありがとう、アルン。

4

2 に答える 2

2

まず、デリゲートをそのソースファイルに割り当てます

次に、ボタンを押したときにこのメソッドを実装し、アプリでカメラコントローラーを開きます

まず、ImagePicker Controllerを直接開くことができないため、iPad用のPopOverControllerを作成します

編集:UIPopOverControllerを追加

- (IBAction) showCameraUI {
     BOOL hasCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
     UIImagePickerController* picker = [[UIImagePickerController alloc] init];
     picker.delegate = self;
     picker.sourceType = hasCamera ? UIImagePickerControllerSourceTypeCamera :    UIImagePickerControllerSourceTypePhotoLibrary;

     if (self.popoverController != nil) {
        [self.popoverController dismissPopoverAnimated:YES];
        self.popoverController=nil;
     }

     self.popoverController = [[UIPopoverController alloc] initWithContentViewController:picker];
      CGRect popoverRect = [self.view convertRect:[yourBtn frame]
                                   fromView:[yourBtn superview]];

     popoverRect.size.width = MIN(popoverRect.size.width, 100) ;
     popoverRect.origin.x = popoverRect.origin.x;

     [self.popoverController
     presentPopoverFromRect:popoverRect
     inView:self.view
      permittedArrowDirections:UIPopoverArrowDirectionAny
     animated:YES];

    }

そして、キャプチャされた画像を取得するためにこのデリゲートメソッドを実装します

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [picker dismissModalViewControllerAnimated:YES];
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
    UIImage *yourImageView = image;
    if (popoverController != nil) {
     [popoverController dismissPopoverAnimated:YES];
     self.popoverController=nil;
     }
}

ユーザーがコントローラーをキャンセルする場合は、このメソッドを実装します

- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker
{
    [picker dismissModalViewControllerAnimated:YES];
     if (popoverController != nil) {
     [popoverController dismissPopoverAnimated:YES];
     self.popoverController=nil;
     }
}

- (void)pickerDone:(id)sender
{
     if (popoverController != nil) {
     [popoverController dismissPopoverAnimated:YES];
     self.popoverController=nil;
     }
}
于 2013-02-06T12:54:46.530 に答える
0

デリゲートを使用できます:UIImagePickerControllerDelegate

以下を使用してください:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)mediaAndInfo

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
于 2013-02-06T12:53:26.650 に答える