UICollectionview Défilement saccadé lors du chargement de cellules
J'ai une galerie dans mon application en utilisant un UICollectionView
. Les cellules sont environ 70,70 taille. Je suis à l'aide de ALAssets
de la ALAssetLibrary
dans la galerie que j'ai stocké dans une liste.
Je suis en utilisant le schéma habituel pour remplir les cellules:
-(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
mycell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
mycell.imageView.image = [[UIImage imageWithCGImage:[alassetList objectAtIndex:indexpath.row] thumbnail]];
return mycell;
}
Ma galerie est de défilement saccadé. Je ne comprends pas pourquoi c'est. J'ai essayé d'ajouter un NSCache pour mettre en cache les images miniatures (pensant peut-être que la création d'images est cher), mais cela n'aide pas pour la performance.
Je m'attends à l'INTERFACE utilisateur pour être beurré comme le stock app.
Je suis maintenant en douter peut-être quelque chose dans le UICollectionViewCell prepareForReuse
qui peuvent être maintenant jusqu'à la dequeueReusableCellWithReuseIdentifier
méthode, mais à l'aide des instruments que je n'étais pas en mesure de trouver cela.
Toute autre chose qui peut être la cause? Est-il un "plus vite" manière de préparer la UICollectionViewCell
ou à dequeue
dans un plus rapide de la mode?
- À l'aide d'instruments, avez-vous repérer un appel de méthode qui prend trop de temps? E. g. 0.02 sec pour la réutilisation d'une cellule est trop pour un défilement fluide.
- Oui. Après avoir fait cela, j'ai vu la méthode [uicollectionview updatevisiblecellsnow] qui a été appelé des tonnes de fois. Googlé ce problème et a obtenu à cette question stackoverflow.com/questions/16336772/....
- Essayez de déplacer certaines de la cellule d'affichage, les fonctions liées à l'affichage de la collection du willDisplayCell méthode, et d'autres à la didEndDisplayingCell méthode.
- Voici ma dernière itération de parfaitement lisse défilement de la collection de visualiser en temps réel la vidéo de prévisualisation (jusqu'à 16 à l'heure: youtu.être/7QlaO7WxjGg de plus, Il utilise une couverture de flux de mise en page personnalisée et de "réflexion" de la vue qui reflète la prévisualisation de la vidéo à la perfection. Le code source est ici: mediafire.com/download/ivecygnlhqxwynr/...
Vous devez vous connecter pour publier un commentaire.
Donc toute personne ayant défilement questions devraient faire cette
ajouter ces 2 lignes qui suivent votre file d'attente
- (Cell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
UICollectionViewCell
sous-classes. Dois-je encore définir ces propriétés, à chaque fois que je la file d'attente pour les réutiliser, ou suffit-il de les appeler une fois surinitWithCoder:
?Je suppose que le "choppyness" est à venir à partir de la UIImage allocation, pas n'importe quoi avec le
dequeueReusableCellWithReuseIdentifier
méthode. J'avais essayer de faire l'image d'allocation sur un thread d'arrière-plan et voir si cela rend les choses un peu plus de beurre.Plus de détails peuvent être trouvés ici: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html
Charger vos images à l'aide de NSURLConnection de
sendAsynchronousRequest:queue:completionHandler:
Tique sur le clip des sous-vues et opaque dans les attributs de l'inspecteur et cochez la pagination est activée.
Si quelqu'un est à l'aide de PhImageManager, la désactivation de l'synchrone résolu le problème. (deliveryMode = .FastFormat pouvez également donner à d'autres l'amélioration de la performance, mais le compromis est la miniature sera de moins bonne qualité)
J'ai eu des problèmes avec
UICollectionView
de défilement.Ce qui a fonctionné (presque) comme un charme pour moi: j'ai renseigné les cellules avec des vignettes au format png 90x90. Je dis "presque" parce que le premier complet de défilement n'est pas si lisse, mais jamais écrasé... plus
Dans mon cas, la taille de la cellule est 90x90.
J'ai eu beaucoup de png d'origine tailles avant, et c'était très agitée quand png taille d'origine était supérieure à ~1000x1000 (nombreux accidents sur le premier parchemin).
Donc je sélectionne 90x90 (ou similaire) sur le
UICollectionView
et afficher l'original png (peu importe la taille). Espérons que cela aide les autres.