CollectionView трепва/заеква при превъртане

Имам UICollectionView, който показва списък с плейлисти и изображение от една от песните в плейлиста.

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; {

    playlistCell*    cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    if(!cell)
    {
        cell = [[playlistCell alloc] init];
    }

    // Configure the cell...

    MPMediaItem *rowItem = [[playlists objectAtIndex:indexPath.row] representativeItem];

    UIImage *cellBG = [self getAlbumArtworkWithSize:CGSizeMake(320, 320) forPlaylist:[playlists objectAtIndex:indexPath.item]];

    cell.image = cellBG;

    return cell;
}

Въпреки това потрепва/заеква, когато превъртам. Изобщо не е гладко и може да бъде мъчно да се превърта.

Как да направя това по-гладко?


person WunDaii    schedule 26.05.2014    source източник
comment
зареждате ли изображения от интернет тук?   -  person E-Riddie    schedule 26.05.2014
comment
Може би getAlbumArtworkWithSize: прави някои тежки неща, код?   -  person Jkmn    schedule 26.05.2014
comment
Не, поради което не мога да намеря никакво решение. Всички решения обикновено се отнасят до изтегляне на изображения от интернет   -  person WunDaii    schedule 26.05.2014
comment
@Jkmn Но със сигурност след като зареди изображението, не трябва да се налага да го презарежда отново от getAlbumArtworkWithSize?   -  person WunDaii    schedule 26.05.2014
comment
Ами getAlbumArtworkWithSize: ще бъде извикан много пъти, всеки път, когато на екрана се появи клетка, която е извън екрана.   -  person Jkmn    schedule 26.05.2014
comment
@Jkmn Ах, по дяволите. Има ли някакъв начин да го накарам временно да го съхранява, така че да не се налага да извиква метода всеки път?   -  person WunDaii    schedule 26.05.2014


Отговори (1)


Можете да направите потребителския интерфейс по-отзивчив просто като заредите вашите изображения във фонов режим с GCD по следния начин:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; {

    playlistCell * cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    if(!cell)
    {
        cell = [[playlistCell alloc] init];
    }

    // Configure the cell...
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        MPMediaItem *rowItem = [[playlists objectAtIndex:indexPath.row] representativeItem];
        UIImage *cellBG = [self getAlbumArtworkWithSize:CGSizeMake(320, 320) forPlaylist:[playlists objectAtIndex:indexPath.item]];
        dispatch_async(dispatch_get_main_queue(), ^{
            cell.image = cellBG;
        });
    });
    return cell;
}
person Jack    schedule 26.05.2014