我有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
转换会断断续续并且真实不稳定/丑陋。我已经完成了一个配置文件,我的代码中没有任何内容真正脱颖而出。
我知道用相机拍摄的照片可能很大,但如果我只是传递一个参考照片,为什么它会对任何东西产生影响?我有我在照片库中拍摄的照片,当我从那里选择它们并将它们传递到下一个过渡时,一切都很顺利。
任何人都可以了解导致这种情况的原因吗?
答案 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中进行,这可能会使您的过渡停滞不前。
有几种解决方法:
在viewDidAppear中显示图像,只需保留对图像的引用并将其设置为viewDidAppear中的imageView.image。
在显示之前先调整图片大小,比如640 x 960。