objective-c - 重新加载 UICollectionView 导致闪烁

标签 objective-c xcode uitableview uitabbarcontroller uicollectionview

我已经对 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.
}

两点说明:

  1. 我应该补充一点,我正在尝试重用尽可能多的代码,而不必在 Storyboard或 Controller 上创建新 View 。

  2. 因为返回的媒体非常动态并且可以定期更新,所以我不得不在 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/

相关文章:

ios - 如何在滑动操作后更新 tableview 行?

iphone - 如何在 iphone sdk 中使用 openlayers

ios - 从 NSDictionary 获取值时出错

objective-c - 为 ARC 做好准备 - 最佳策略?

objective-c - 如何链接 Interface Builder View

xcode 4.5 - 找不到架构 i386 (zbar) 的符号

ios - 将下载的图像加载到数组中并显示在uitableview中

ios - 在自定义 tableviewcell 中更改 UIImage

ios - UIBezierPath - 起伏/嘈杂数据的平滑图表

iOS:如何将 TableView 单元格的第一个 View Controller 标签数据传递给第二个 View Controller 的 textView?