我正在开发 iPad 应用程序。我有一些 UIViewController (viewController) 和启用了分页的 UIScrollView (scrollView)。我将一些子 UIViewControllers(childVC_1、childVC_2)添加到 scrollView。
每个 childVC 几乎占据整个屏幕,并有 5-10 个大图像作为 subview 。我无法加载所有需要的 childVCs 并将它们存储在内存中,所以我只先添加 child VC。我想动态添加下一个 childVC 并删除前一个,以保持内存清洁。我已经异步预加载了下一个 childVC 所需的所有图像,并将它们存储在一些 NSArray(图像)中。所有图像均已渲染。
- (UIImage *)renderedImageFromImage:(UIImage *)image
{
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
[image drawInRect:rect];
UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return renderedImage;
}
我想在用户开始滚动时添加下一个 childVC。我用预加载的图像初始化 childVC。添加 subview Controller 很常见。
childVC = [[ChildVC alloc] initWithImages:images];
[self addChildViewController:childVC];
[self.scrollView addSubview:childVC.view];
childVC.view.frame = CGRectMake(xCoord, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height);
[childVC didMoveToParentViewController:self];
我希望它会很快,因为我已经预加载了所有需要的图像。我在 childVC 的 viewDidLoad 方法中有一些日志,一切都非常快。但是 viewWillAppear 和 viewDidAppear 之间有很大的延迟(大约半秒)。
我不知道这两种方法之间到底发生了什么,我也不知道我还能做些什么来让它更快。希望有人有一些想法。
最佳答案
在滚动过程中,尽量不要在 View 层次结构中添加或删除 View 。如果您可以重复使用 ScrollView 中已有的 View ,请更改内容并重新排列框架。 (因此,例如,如果您向下滚动,查看顶部不再可见的 View ,请更改内容并将其移动到当前位置下方。
根据我的经验,调用 addSubview
和 removeFromSuperView
会在滚动期间增加小的延迟。
关于ios - 如何避免 viewWillAppear 和 viewDidAppear 之间的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24607564/