2

我对 CollectionView 进行了子类化,并使用它来显示不同类别的图像集合。例如:最受欢迎、观看次数最多。我通过 TabbarController 访问每个类别/页面。

我的课程是:

主类 - MediaList -用于在集合视图中获取和显示媒体的基类,具体取决于请求的媒体类型。

子类- MostPopular 和 MostViewed 都是从主类继承的非常轻量级的类。

问题是当我从 MostPopular 移动到 MostViewed 时,集合视图最初显示最后一个类别的图片,然后刷新到新的……结果你会看到一个闪烁的效果。

来自 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];
}];
}

来自 SubClass (MostPopular) 的示例代码

- (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. 我应该补充一点,我正在尝试尽可能多地重用代码,而不必在情节提要或控制器上创建新视图。

  2. 因为返回的媒体非常动态并且可以定期更新,所以我不得不在 viewDidAppear 上重新加载我的数据(使用 getMedia)。现在这意味着每次选择特定页面都会导致在加载新视图时闪烁......

更新 - 经过进一步调查,这似乎与 uicollectionview 的子类化无关。相反,问题只是将数据重新加载到 uicollectionview 中。可以肯定的是,我只是单击了两个子类视图之一。我还在 viewdidAppear 方法中添加了一个 reload 方法,只是为了让问题变得更糟。也更容易看出问题在于集合视图中的最后一组图像最初会在新图像刷新之前显示最后一类图片。然后,一旦刷新集合,我就会闪烁。

* 10 月 4 日更新 * 开始认为我最好的解决方案是显示等待指示器并在加载时阻止页面。我确实尝试将 uicollectionview 设置为 nil,并相信这也可以解决问题,但不确定是否可以直接重置。

4

1 回答 1

3

尽管在上面的代码中可能不会立即发现根本原因实际上是 getMedia 调用。所有的子类化等都可以正常工作。

特别是在 getMedia 调用中具有 reload 方法并正在创建问题。

[_mediaCollection performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
于 2013-10-04T17:03:09.457 回答