Sed*_*ien 19 uiviewcontroller ios uicollectionview
UICollectionView我的应用程序中有一个全屏幕.它水平滚动,每个单元格填充集合视图的边界.集合视图由a管理UIViewController.
鉴于每个"页面"都相当复杂,因此每个页面本身都需要由关联管理UIViewController.iOS 5支持视图控制器包含,因此子viewWillAppear:视图在附加和分离视图时应该接收适当的生命周期方法(例如,等).这种视图回收有多好?
从页面"1"滚动到"2",将创建一个新视图(因为在触摸期间两者可能同时在屏幕上).从页面"2"移动到"3",UICollectionView可以成功地使页面"1"的视图出列,但现在发生了什么?我会强制将视图插入视图控制器三吗?
id cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ident" forIndexPath:indexPath];
UIViewController *child_controller = [self controllerAtIndexPath:indexPath];
[child_controller setView:cell];
// ... and so on
Run Code Online (Sandbox Code Playgroud)
这感觉不对.但是,我无法想到在这种情况下正确重用视图的正确方法.我完全采取了错误的做法吗?
我不认为这UICollectionView是你的任务的最佳选择.
就像rob mayoff所说:你可以使用UIPageViewController.
另一个选项可以使用UIScrollView3个子视图(上一个,当前一个,下一个).并且您将能够轻松管理它的位置和滚动视图偏移以实现您想要的效果.
这在WWDC 2011的"高级Scrollview技术"中有所描述.你可以从那里获取源代码.
我做了同样的事情,但是有两个视图控制器同时可见,并且可以重新排序,所以集合视图是正确的选择.
事实证明,删除前一个视图控制器的视图并添加一个新视图会导致滚动性能受到很大影响,删除视图是最慢的方法.
如果细胞的新用途相似但不同,重复使用细胞才有意义 - 例如,您正在更改标签的文本或在图像视图中放置不同的图像.如果您正在拆除并替换整个视图层次结构,那么您并没有真正重用该单元格.
我最终做的是为每个可以包含的视图控制器使用新单元格.在我的情况下,单元格的数量有一个限制,这意味着内存消耗并没有真正存在问题,因为有多个视图控制器同时处于播放状态.
因此,简而言之 - 不要重复使用细胞.它比保持旧的更昂贵.向下滚动一百行表不同于滚动几个全屏视图.但是,鉴于您的全屏幕事实,滚动视图可能是更好的选择.
使用UIView子类(或UICollectionViewCell子类)而不是封装的UIViewControllers可能更好.封装的UIViewControllers必须了解其父视图控制器,这可能会导致代码可维护性问题.
复杂性并不意味着您应该考虑采用UIViewController.UIViews也很复杂.UIViewController的作用实际上是提供额外的封装和生命周期,它听起来并不像你需要的那样.
正如其他人所说,UIPageViewController似乎也是一个不错的选择,但我不知道你的具体情况.
| 归档时间: |
|
| 查看次数: |
7609 次 |
| 最近记录: |