我尝试使用3个UIViewController子视图创建UIScrollView。我做了一些研究,似乎这个问题的答案提供了一个很好的解决方案Setting up UIScrollView to swipe between 3 view controllers,但我不确定。我下载了回答者很好地发布的示例代码https://github.com/gneil90/CustomContainerViewController,我的问题如下:
BViewController *bViewController = [[BViewController alloc]init];
[self addChildViewController:bViewController];
[self.scrollView addSubview:bViewController.view];
[bViewController didMoveToParentViewController:self];
CViewController *cViewController = [[CViewController alloc]init];
CGRect frame = cViewController.view.frame;
frame.origin.x = 320;
cViewController.view.frame = frame;
[self addChildViewController:cViewController];
[self.scrollView addSubview:cViewController.view];
[cViewController didMoveToParentViewController:self];
self.scrollView.contentSize = CGSizeMake(640, self.view.frame.size.height);
self.scrollView.pagingEnabled = YES;
示例项目中的代码立即初始化两个UIViewControllers。有没有办法懒惰加载它们/这会提供任何类型的性能增强?如果我的两个视图控制器下载数据,我不想下载这些数据,除非用户实际上正在查看这些屏幕,但是通过这种初始化,用户可以快速查看它们。
答案 0 :(得分:0)
您可以使用UIScrollView
委托方法,只需初始化第一个视图控制器。
对于视图控制器的其余部分,您可以创建属性。在UIScrollView
委托方法scrollViewDidScroll
中执行以下操作 -
// Check at what index, to second VC or third VC
if (some condition, you can define this based on scroll postion) {
// Check if second view controller
if (!self.cViewController) {
cViewController = [[CViewController alloc]init];
CGRect frame = cViewController.view.frame;
frame.origin.x = 320;
cViewController.view.frame = frame;
}
// similarly for third
}
使用此视图控制器会根据需要进行初始化。