UINavigation Transition Stuttering

时间:2013-01-04 03:39:00

标签: iphone ios cocoa-touch uinavigationcontroller uiimagepickercontroller

我有UIImagePickerController,允许用户拍照,然后将其存储在UIImageView中,如下所示:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self dismissModalViewControllerAnimated:YES];
    self.photoImageView.image = nil;
    [self.activityIndicatorView startAnimating];

    dispatch_async(dispatch_get_global_queue(0, 0), ^
    {
        UIImage *image = [[info objectForKey:@"UIImagePickerControllerOriginalImage"] retain];
        dispatch_async(dispatch_get_main_queue(), ^
        {
            self.photoImageView.image = image;
            [self.activityIndicatorView stopAnimating];
            self.rightButton.enabled = YES;
            [image release];
        });

    });
}

当我将此图像作为参数传递给导航堆栈上推送的下一个UIViewController时,UINavigation转换会断断续续并且真实不稳定/丑陋。我已经完成了一个配置文件,我的代码中没有任何内容真正脱颖而出。

我知道用相机拍摄的照片可能很大,但如果我只是传递一个参考照片,为什么它会对任何东西产生影响?我有我在照片库中拍摄的照片,当我从那里选择它们并将它们传递到下一个过渡时,一切都很顺利。

任何人都可以了解导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:1)

可能是因为当新的UIViewController被推送到导航堆栈时会发生调整大小过程。

让我们说从iPhone 4相机拍摄的照片分辨率为2592 x 1936(http://stackoverflow.com/questions/3270202/what-is-resolution-of-photo-taken-by-iphone-4-camera )。您的UIImageView大小为400 x 300px,然后调整大小过程将在viewWillAppear中进行,这可能会使您的过渡停滞不前。

有几种解决方法:

  1. 在viewDidAppear中显示图像,只需保留对图像的引用并将其设置为viewDidAppear中的imageView.image。

  2. 在显示之前先调整图片大小,比如640 x 960。