我正在开发iPad应用程序。我有一些UIViewController(viewController)与UIScrollView(scrollView)启用了分页。我将一些子UIViewControllers(childVC_1,childVC_2)添加到scrollView。
每个childVC几乎占据整个屏幕,并具有5–10个大图像作为子视图。我无法加载所有需要的childVC并将它们存储在内存中,因此我仅添加第一项
childVC。我想动态添加下一个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。添加子视图控制器非常常见。
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之间有很大的延迟(大约一半的时间)。
我不知道这两种方法之间到底发生了什么,我也不知道我还能做些什么来使其更快。希望有人有一些想法。
最佳答案
尝试在滚动过程中不要在视图层次结构中添加或删除视图。如果可以重用滚动视图中已有的视图,请更改内容并重新排列框架。 (因此,例如,如果您向下滚动以查看顶部不再可见的视图,请更改内容并将其移动到当前位置下方。
根据我的经验,调用addSubview
和removeFromSuperView
可能会在滚动过程中增加一些延迟。
关于ios - 如何避免viewWillAppear和viewDidAppear之间的延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24607564/