2013-05-09 4 views
0

У меня есть UICollectionView с некоторыми изображениями в нем. Он очень медленный и резкий, чтобы загрузить изображения при первом прокрутке вниз. После этого, когда изображения загружаются, все в порядке.UIcollectionView имеет медленную рывковую загрузку изображений и прокрутку

Я думаю, проблема в том, что изображения не загружаются, пока ячейка не дойдет до экрана, что вызывает задержку. Я предполагаю, что мне нужно сделать, это загрузить изображения, прежде чем они появятся на экране. Я не уверен, как это сделать, и я, очевидно, искал неправильную вещь, так как не могу найти ответы. Пожалуйста, может кто-нибудь указать мне в правильном направлении, пожалуйста?

Вот код, который загружает изображения ... Изображения в моем приложении не загружены или что-то еще.

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"Cell"; 
    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath]; 
    [[cell myImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]]; 

    return cell; 
} 

Спасибо!

+0

Я предполагаю, что вы уже решили это, но в моем случае разрешенная разбивка на страницы закручивала прокручиваемость. Мне это не нужно, так как я дезактивировал, что прокрутка была удивительно быстрой. –

+0

Вы, должно быть, решили эту проблему. Я столкнулся с той же проблемой, но вместо изображения, я загружаю карту google. Можете ли вы поделиться решением, это может помочь? + @ JuanGonzález – iDilip

ответ

1

Несмотря на то, что вы не загружаете изображения, загрузка из постоянного хранилища по-прежнему слишком медленная, чтобы выполнять во время прокрутки, как вы обнаружили. Попробуйте обработать + imageNamed: call, как если бы это была загрузка, которая сделает код более сложным, но исправьте отзывчивость. Ответы на другие вопросы, такие как Poor UICollectionView Scrolling Performance With UIImage, могут помочь.

5

Посмотрите на этот answer

Добавьте эти 2 строки после DEQUEUE

cell.layer.shouldRasterize = YES; 
cell.layer.rasterizationScale = [UIScreen mainScreen].scale; 
0

Просто извлечь содержимое и сохранить его в массиве асинхронно. И выполняйте только назначающую часть из метода делегата. Если вы хотите отобразить все ячейки сразу, поместите образец уменьшенного изображения и замените его оригиналом, когда массив получит реальное изображение. Кроме того, вы можете повторно загружать представление коллекции каждый раз, когда массив получает объект, так что количество клеток коллекции увеличивается постепенно по мере получения изображений.

Смежные вопросы