【问题标题】:Passing UIImage to second view controller lags transition将 UIImage 传递给第二个视图控制器滞后转换
【发布时间】:2011-08-07 09:02:56
【问题描述】:

我正在使用 UIImagePickerController 从我的相册中选择图像。选择图像后,我会将图像传递给第二个视图控制器并将其显示在 UIImageView 中。见以下代码:

第一个视图控制器:

- (IBAction)selectPhoto
{
    imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    [self presentModalViewController:self.imagePicker animated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{    
    UploadViewController *uploadViewController = [[UploadViewController alloc] initWithNibName:@"UploadViewController" bundle:nil];
    [uploadViewController setImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"]];

    [picker pushViewController:uploadViewController animated:YES];
}

第二个视图控制器:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set the image view image
    imageView.image = self.image;
}

代码完成了这项工作,但是,当我从图像选择器推送到我的第二个视图控制器时,它在转换时会滞后。

理想情况下,我想要一个平稳的过渡,但如果它只是等待半秒或其他什么然后平稳移动,我会很高兴。

谁能解释为什么会发生这种情况以及我如何/如果可以解决它?

谢谢。

【问题讨论】:

  • 你想在 imagePicker 上推送控制器吗?

标签: iphone objective-c ios uiimageview uiimagepickercontroller


【解决方案1】:

试试这个,这里引入定时器是为了提供延迟(0.5sec),

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{    
    [NSTimerscheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timerAction:) userInfo:info repeats:NO];
}


-(void)timerAction:(NSTimer *)timer
{
  UploadViewController *uploadViewController = [[UploadViewController alloc] initWithNibName:@"UploadViewController" bundle:nil];
    [uploadViewController setImage:[[timer userInfo]objectForKey:@"UIImagePickerControllerOriginalImage"]];

    [picker pushViewController:uploadViewController animated:YES];
   [uploadViewController release];
}

【讨论】:

  • 感谢您的回复,但没有解决问题。过渡延迟了半秒,但在过渡期间仍然滞后。
  • 你试过上面的代码吗?我希望您已将 [picker pushe...] 替换为 [self push..]?
  • 是的,我已经尝试过代码,我用 [imagePicker pushe...] 替换了 [picker pushe...],因为这是我用于图像选择器的属性。计时器延迟了转换,但是当转换发生时,它仍然滞后。
  • 当然不行。你正在做同样的事情,只是稍后。但是,您确实修复了内存泄漏。 :)
【解决方案2】:

延迟可能是由于渲染图像,您可以尝试让 UploadViewController 的初始视图包含一个活动微调器,然后在 viewDidAppear 方法中实际设置图像,该方法应在动画完成后调用。

【讨论】:

  • 这个方法确实意味着我得到了一个平滑的过渡,但是它坐下来等待图像加载。有什么办法让我坐下来等待图像在过渡前加载?这样当你推送到新视图时,图像已经存在并且可以平滑滑动?
  • 我在 iOS 中注意到的一件事是,绘制图像是一个耗时的过程,由于照片库中的图像通常比应用程序中显示所需的分辨率高得多,因此更糟糕的是.我在我的一个应用程序中做的一件事是在将图像绘制到屏幕上之前按比例缩小图像。您可能应该检查 Instruments 中的应用程序以查看时间花费在哪里,但如果与绘图相关的缩小可能会有所帮助。
  • 您在调整图像大小时很准确。我完全忘记了图像将是几千乘几千像素。我使用来自ofcodeandmen.poltras.com/2008/10/30/… 的图像大小调整类别示例将大小调整为 960x640,并且可以完美加载。感谢您的帮助!
  • 调整图像大小将解决问题。效果正是你想要的,在 UIImagePickerController 上等待半秒然后平滑移动。
猜你喜欢
  • 2017-08-08
  • 2012-05-02
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多