我已经对 CollectionView 进行了子类化,并使用它来显示不同类别的图像集合。例如:最受欢迎、观看次数最多。我通过 TabbarController 访问每个类别/页面。
我的类(class)是:
主类 - MediaList - 用于根据请求的媒体类型在 Collection View 中获取和显示媒体的基类。
子类 - MostPopular 和 MostViewed 都是从主类继承的非常轻的类。
问题是,当我从 MostPopular 移动到 MostViewed 时, Collection View 最初显示最后一类图片,然后刷新到新的...结果您看到闪烁效果。
来自 MediaList 的示例代码
- (void)viewDidLoad
{
[super viewDidLoad];
self.mediaCollection.dataSource = self;
self.mediaCollection.delegate = self;
[self getMedia];
}
(void) getMedia
{
NSLog(@"///////////////////////// GETTING MEDIA /////////////////////////");
XMLGenerator * sharedXmlGen = [XMLGenerator sharedXmlGenerator];
GlobalVars * sharedGlobalVars = [GlobalVars sharedGlobalVars];
sharedXmlGen.assetFlag = _contentFilter;
NSLog(@"The filter is: %@", _contentFilter);
[sharedXmlGen getPhotoVideoWithCallBackFunction:^{
[_mediaCollection performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}];
}
子类(最受欢迎)的示例代码:
- (void)viewDidLoad
{
[super setContentFilter:FILTER_POPULAR]; //Set the filter for the type of content
[super viewDidLoad];
// Do any additional setup after loading the view.
}
两点说明:
我应该补充一点,我正在尝试重用尽可能多的代码,而不必在 Storyboard或 Controller 上创建新 View 。
因为返回的媒体非常动态并且可以定期更新,所以我不得不在 viewDidAppear 上重新加载我的数据(使用 getMedia)。现在这意味着每次选择特定页面都会在加载新 View 时导致闪烁...
更新 - 经过进一步调查,这看起来与 uicollectionview 的子类化无关。相反,问题只是将数据重新加载到 uicollectionview 中。可以肯定的是,我只是单击了两个子类 View 之一。我还在 viewdidAppear 方法中添加了一个重新加载方法,只是为了让问题变得更糟。也更容易看出问题是 Collection View 中的最后一组图像在新图像刷新之前最初显示最后一类图片。然后,一旦集合刷新,我就会闪烁。
*10 月 4 日更新 * 开始考虑我最好的解决方案是显示等待指示器并在加载时阻止页面。我确实尝试将 uicollectionview 设置为 nil,并且相信这也会解决问题,但不确定是否可以直接重置。
最佳答案
虽然在上面的代码中可能不会立即显现,但根本原因实际上是 getMedia 调用。所有的子类化等都工作得很好。
特别是在 getMedia 调用中使用 reload 方法并造成问题。
[_mediaCollection performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
关于objective-c - 重新加载 UICollectionView 导致闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19123984/