UINavigation 过渡口吃
Posted
技术标签:
【中文标题】UINavigation 过渡口吃【英文标题】:UINavigation Transition Stuttering 【发布时间】:2013-01-04 03:38:59 【问题描述】:我有一个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】:可能是因为调整大小的过程发生在新 UIViewController 被推送到导航堆栈时。
假设从 iPhone 4 相机拍摄的照片的分辨率为 2592 x 1936 (http://***.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。
【讨论】:
谢谢,你知道我刚刚发现了这个:wiresareobsolete.com/wordpress/2010/08/uiimagepickercontroller,它准确地描述了你所说的调整大小。我的问题是,我可以调用哪些代码来确定调整图像大小的正确大小?它应该只是纵向屏幕边界(*2,如果有视网膜?) 要调整大小的正确大小取决于 UIImageView 大小本身和您想要的纵横比(纵横比适合、纵横比填充等)。我建议使用 640 * 960,因为这是屏幕的视网膜分辨率(但不适用于 iPhone 5),并希望它足够小以使过渡卡顿消失。如果您想将调整大小的版本保存到相机胶卷库(将显示全屏照片),该分辨率也适用。 对我来说,我在 imageView 中缩放该图像,所以我猜屏幕尺寸会做到这一点。您介意将该链接放在#2 的答案中吗? 这是一篇很好的博文,解释了如何在 ios 中调整图像大小,vocaro.com/trevor/blog/2009/10/12/…,希望对您有所帮助以上是关于UINavigation 过渡口吃的主要内容,如果未能解决你的问题,请参考以下文章
如何防止黑色背景出现在我的UINavigationBar中?