我正在开发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之间有很大的延迟(大约一半的时间)。

我不知道这两种方法之间到底发生了什么,我也不知道我还能做些什么来使其更快。希望有人有一些想法。

最佳答案

尝试在滚动过程中不要在视图层次结构中添加或删除视图。如果可以重用滚动视图中已有的视图,请更改内容并重新排列框架。 (因此,例如,如果您向下滚动以查看顶部不再可见的视图,请更改内容并将其移动到当前位置下方。

根据我的经验,调用addSubviewremoveFromSuperView可能会在滚动过程中增加一些延迟。

关于ios - 如何避免viewWillAppear和viewDidAppear之间的延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24607564/

10-10 23:55