2

Я подклассифицировал CollectionView и использовал его для отображения коллекции изображений в разных категориях. Например: Самые популярные, Наиболее просматриваемые. Я обращаюсь к каждой категории/странице через TabbarController.Перезагрузка UICollectionView вызывает мерцание

классов у меня есть следующие:

Главного класса - 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]; 
}]; 
} 

Пример кода из подклассу (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. Поскольку носители возвращаются очень динамично и могут регулярно обновляться, мне пришлось перезагрузить мои данные (используя getMedia) на viewDidAppear. Теперь это означает, что каждый выбор конкретной страницы приведет к мерцанию, когда новый вид загружается ...

Обновление - После дальнейшего расследования он выглядит, как это не имеет ничего общего с наследованием uicollectionview , Проблема в том, что это просто перезагрузка данных в uicollectionview. Конечно, я просто нажал на один из двух подклассовых представлений. Я также добавил метод reload к методу viewdidAppear, чтобы увидеть проблему еще хуже. Также намного легче понять, что проблема заключается в том, что последний набор изображений в представлении коллекции сначала отображает последнюю категорию изображений до того, как обновится новый. Затем, когда коллекция обновляется, я получаю мерцание.

* Обновления Oct 4 * Считая, что мое лучшее решение - отображать индикатор ожидания и блокировать страницу во время загрузки. Я попробовал установить uicollectionview на nil и считаю, что это решит проблему, но не уверен, что ее будет легко сбросить.

+0

Имеет ли каждый контроллер вида свой собственный просмотр коллекции? Или вы пытаетесь поделиться одним и тем же для каждой вкладки? –

+0

Я пытаюсь использовать один и тот же вид коллекции. У меня есть несколько страниц/разделов, подобных этому, поэтому я пытаюсь использовать все возможное. – mday

+0

@WilliamFalcon - Да. Я пытаюсь поделиться одним и тем же представлением коллекции. У меня есть несколько страниц/разделов, подобных этому, поэтому я пытаюсь использовать все возможное. Я обновил свой первоначальный пост двумя разъяснениями ... – mday

ответ

3

Хотя это может быть не сразу видно в коде выше, первопричина была фактически вызовом getMedia. Все подклассы и т. Д. Отлично работают.

В частности, наличие метода перезагрузки в вызове getMedia и создание проблемы.

[_mediaCollection performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 
Смежные вопросы