0

我有一个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过渡会结结巴巴并且非常不稳定/丑陋。我已经完成了一个配置文件,我的代码中没有任何东西真正突出。

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

任何人都对可能导致这种情况的原因有任何见解?

4

1 回答 1

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。

于 2013-01-04T04:52:52.657 回答