gpt4 book ai didi

ios - UICollectionViewCell 中的 UiviewControllers

转载 作者:可可西里 更新时间:2023-11-01 05:28:05 25 4
gpt4 key购买 nike

我在 UIViewController 中有一个 UICollectionView。collectionView 包含 Storyboard中 8 个 View Controller 标识符的数组。数组中的每个 View Controller 都继承自保存 collectionView 的 UIViewController。

代码如下:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return _contentPageRestorationIDs.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

BaseContentViewController *contentViewController = (BaseContentViewController *)[self.storyboard instantiateViewControllerWithIdentifier:self.contentPageRestorationIDs[indexPath.row]];

// Set any data needed by the VC here
contentViewController.rootViewController = self;
contentViewController.view.frame = cell.bounds;
[cell addSubview:contentViewController.view];

return cell;
}

所以我的问题是我的 Collection View 滑动性能真的很慢。我怎样才能提高 UICollectionView 的性能?单元格内的 View Controller 是否在未显示时被“杀死”?

编辑:

根据此处的建议,我已将我的数组更改为包含 View Controller 而不是标识符 nsstring。

在 ViewDidLoad 中:

_collectionView.delegate=self;
_collectionView.dataSource=self;
PRzeroVC *zeroVC = [[PRzeroVC alloc]init];
PRoneVC *oneVC = [[PRoneVC alloc]init];
PRtwoVC *twoVC = [[PRtwoVC alloc]init];
PRthreeVC *threeVC = [[PRthreeVC alloc]init];
PRfourVC *fourVC = [[PRfourVC alloc]init];
PRfiveVC *fiveVC = [[PRfiveVC alloc]init];

_base = [[BaseContentViewController alloc]init];

_pages = [[NSArray alloc]initWithObjects:zeroVC,oneVC,twoVC,threeVC,fourVC,fiveVC, nil];

[_collectionView reloadData];



- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = (UICollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
_base = (BaseContentViewController *)_pages[indexPath.row];

_base.rootViewController = self;
_base.view.frame = cell.bounds;
[cell addSubview:_base.view];

return cell;
}

我的单元格没有显示 View 知道为什么吗?

最佳答案

通过使用队列保留和重用一定数量的实例,我能够获得包含每个 subview Controller 的单元格集合的平滑滚动性能。

GitHub 列出了一些重用队列的实现;并且,在对几乎每一个进行相当彻底的审查之后,我可以自信地推荐这个:

https://github.com/acoomans/ACReuseQueue

根据自述文件:当对象分配和初始化非常耗时时,重用队列是一种快速重用对象的方法。

您的 View 未显示的原因是因为您没有从单元格子类中实例化 subview Controller ,也没有从 cellForItemAtIndexPath 中添加 View 。它与范围有关,而您已经倒退了。

此处提供了将 subview Controller 添加到单元格的完美说明集:

http://khanlou.com/2015/04/view-controllers-in-cells/

关于ios - UICollectionViewCell 中的 UiviewControllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com