【问题标题】:UIPickerView UIImage and SegueUIPickerView UIImage 和 Segue
【发布时间】:2014-06-11 13:46:58
【问题描述】:

在我的应用程序中,我在 UserView 中使用带有 UIImagePickerCollection 的相机。但是一旦用户选择“使用照片”,我想将我的照片放在另一个视图中,即“cameraView”,因为我需要进行一些处理。这是我的代码:

-(void)takeAPicture{
NSLog(@"CHEESE");
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];

imagePicker.delegate = self;

imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;

imagePicker.mediaTypes =
@[(NSString *) kUTTypeImage];

imagePicker.allowsEditing = NO;
[self presentViewController:imagePicker
                   animated:YES completion:nil];
}

-(void)imagePickerController:
(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self dismissViewControllerAnimated:YES completion:^{
    _img = [info objectForKey:UIImagePickerControllerOriginalImage];
    if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) {
        UIImageWriteToSavedPhotosAlbum(_img, nil, nil, nil);
    }}];
    [self performSegueWithIdentifier:@"toCameraView" sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"toCameraView"])
        {
            CameraViewController *transferViewController = segue.destinationViewController;
        transferViewController.img = _img;
    }
}

当我运行我的应用程序时,我收到一条警告消息:

Warning: Attempt to present <CameraViewController: 0x17e20eb0> on <EIUserViewController: 0x189b1000> while a presentation is in progress!

我不明白它是什么,以及如何处理它,我无法在另一个视图中接收我的图像并在选择“使用图片”后直接显示我的视图。如果有人有解释或解决方案?谢谢你们!

【问题讨论】:

    标签: ios objective-c uiimage uipickerview


    【解决方案1】:

    您正在尝试 [self performSegueWithIdentifier:@"toCameraView" sender:self] 在 UIImagePickerController 关闭期间,换句话说:无法为第一个 VC 消失期间出现的第二个 VC 设置动画。 尝试移动 [self performSegueWithIdentifier:@"toCameraView" sender:self];在完成块内:

    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        [self dismissViewControllerAnimated:YES completion:^{
        _img = [info objectForKey:UIImagePickerControllerOriginalImage];
        if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) {
            UIImageWriteToSavedPhotosAlbum(_img, nil, nil, nil);
        [self performSegueWithIdentifier:@"toCameraView" sender:self];
        }}];
    }
    

    【讨论】:

      【解决方案2】:

      所以,当 imagePicker 调用委托方法 imagePickerController: didFinishPickingMediaWithInfo: 时,imagePicker 仍然由您的 viewController 呈现。

      一个解决方案是在您返回 viewController 时显示 cameraView,如下所示:

      - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
      {
          [self dismissViewControllerAnimated:YES completion:^{
          _img = [info objectForKey:UIImagePickerControllerOriginalImage];
          if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) {
              UIImageWriteToSavedPhotosAlbum(_img, nil, nil, nil);
          }}];
          self.newPicture = YES;
      }
      
      - (void)viewDidAppear:(BOOL)animated
      {
          [super viewDidAppear:animated];
          if (self.newPicture) {
              [self performSegueWithIdentifier:@"toCameraView" sender:self];
              self.newPicture = NO;
          }
      }
      

      希望对你有帮助

      【讨论】:

      • - (void)viewDidAppear:(BOOL)animated 可以涉及 ViewController 的其他代码。最简单的方法是在没有 Bool 变量的情况下添加到 completionBlock
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多