Mam galerię w mojej aplikacji z wykorzystaniem UICollectionView
. Komórki mają rozmiar około 70,70. Używam ALAssets
z galerii ALAssetLibrary
w galerii, którą zapisałem na liście.UICollectionview Przewijanie przerywane podczas ładowania komórek
Używam zwykły wzorzec dla wypełniania komórek:
-(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;
}
Moja galeria jest przewijanie niepewny. Nie rozumiem, dlaczego tak jest. Próbowałem dodać NSCache do buforowania miniaturek (myślę, że może tworzenie obrazów było drogie), ale to nie pomogło w wydajności.
Spodziewam się, że interfejs użytkownika będzie równie maślany jak aplikacja giełdowa.
Podejrzewam, że może to być coś w UICollectionViewCell prepareForReuse
, które może wstrzymywać metodę dequeueReusableCellWithReuseIdentifier
, ale używając instrumentów, nie byłem w stanie tego znaleźć.
Czy może to być inna przyczyna? Czy istnieje "szybszy" sposób na szybsze przygotowanie modeli UICollectionViewCell
lub dequeue
?
Za pomocą instrumentów zauważyłeś wywołanie metody, które zajęło zbyt dużo czasu? Na przykład. 0,02 s dla ponownego użycia jednej komórki to zbyt dużo dla płynnego przewijania. –
Tak. Po zrobieniu tego zobaczyłem, że metoda [uicollectionview updatevisiblecellsnow] była wywoływana wiele razy. Google zgłosił ten problem i dostał się do tego pytania http://stackoverflow.com/questions/16336772/uicollectionview-performance-updatevisiblecellsnow. –
Spróbuj przenieść niektóre funkcje związane z wyświetlaniem komórki do metody willDisplayCell widoku kolekcji, a inne do metody didEndDisplayingCell. –