在UIView中使用UIImagePickerController

Tas*_*que 8 uiview uiimageview uiimagepickercontroller ipad ios

我有按钮,当我点击显示相机(完美的工作)

- (IBAction)getPhoto:(id)sender
{
    NSLog( @"Button clicked!" );
    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    }

    else {  // IF the device doesn't have a camera, so use the photos album
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
    }

    [self addSubview:imagePicker.view];
}
Run Code Online (Sandbox Code Playgroud)

之后我可以拍摄图像,等等 - 但是当我点击"使用"时:这里没有任何反应是我的方法:图像选择器没有解雇它的方法:应用程序根本什么都不做,我正试图拍摄我只是的图像将其显示在屏幕上的CGRect中.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissViewControllerAnimated:YES completion:NULL];

    UIImageView *patientImage = [[UIImageView alloc] init];
    patientImage.frame = CGRectMake(625, 25, 83, 103);

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.patientImage.image = chosenImage;
}
Run Code Online (Sandbox Code Playgroud)

即使我在没有拍摄图像的情况下点击取消按钮,imagePicker(相机界面)也不会自行解除

任何帮助,建议或指导将非常感激.

Mic*_*ann 5

你不应该在addSubview那里做" "事情,而是做:

[self presentViewController:imagePicker animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)


lna*_*ger 5

您应该将选择器添加到a,而不是将选择器添加为子视图UIPopoverController.

然后,您可以UIView使用如下的presentPopoverFromRect:inView:permittedArrowDirections:animated:popover方法在子类中显示它:

self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[self.popover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用委托方法来解除弹出窗口:

[self.popover dismissPopoverAnimatedYES];
Run Code Online (Sandbox Code Playgroud)

在被要求的官方文档:

该表指示在iPad上,如果指定源类型为UIImagePickerControllerSourceTypePhotoLibraryUIImagePickerControllerSourceTypeSavedPhotosAlbum,则必须使用弹出控制器显示图像选择器,如"UIPopoverController类参考"中的"演示和解除弹出"中所述.如果您尝试以模态方式(全屏)呈现图像选择器以便在保存的图片和电影中进行选择,系统会引发异常.

在iPad上,如果指定源类型 UIImagePickerControllerSourceTypeCamera,则可以模态(全屏)或使用弹出窗口显示图像选择器.但是,Apple建议您仅全屏显示相机界面.


Vin*_*yne 4

方法是getPhoto:UIView子类中吗?

如果是这样的话,那么最好:

  1. getPhoto:代码完全移出子UIView类,并将其放入视图的父视图控制器中。

  2. 使你UIButton的 UIView 的属性:@property (nonatomic, strong) UIButton *myButton;

  3. 在视图控制器中,设置按钮的目标和操作,如下所示:

    [myView.myButton addTarget:self action:@selector(getPhoto:) forControlEvents:UIControlEventTouchUpInside];
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后,在您的getPhoto:方法中调用[self presentViewController:imagePicker animated:YES completion:NULL];

  5. 您的- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info代码也应该进入视图控制器,更改self.patientImage.image = chosenImage;myView.patientImage.image = chosenImage;