Ich habe ein Problem mit einer UICollectionView, die ich glaube ich auf den folgenden Bereich eingegrenzt haben. Das Problem ist, dass, wenn ich ein Neuladen auf der UICollectionView anrufe, ein Flimmern auftritt und 1 Bild geladen wird, gefolgt von der korrekten Bildsekunde. Fast wie wenn man neue Zellen scrollt und sie aktualisiert, aber ohne Scrollen.UICollectionView Flicker beim Neuladen und Aufrufen von requestImageForAsset
Jetzt habe ich es mit einem einfachen
getestetsampleImage.image = [UIImage imageNamed:@"LogoHome"];
Und ich bekomme kein Flackern auch immer so habe ich es verengt bis auf den folgenden Code
[self.imageManager requestImageForAsset:[self.arrayPhotoAssets objectAtIndex:indexPath.row]
targetSize:CGSizeMake(imageWidth, imageHeight)
contentMode:PHImageContentModeAspectFill
options:nil resultHandler:^(UIImage *result, NSDictionary* info){
UIImageView *sampleImage = (UIImageView *)[cell viewWithTag:1];
sampleImage.image = result;
}];
, die innerhalb von
ist- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
Gibt es eine Möglichkeit, dass ich den Code anpassen kann, um das oben genannte Ereignis zu verhindern? Hier ist der vollständige Code-Schnipsel:
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
////// GALLERY COLLECTION VIEW
if(collectionView.tag == 1){
static NSString *cellIdentifier = @"galleryCell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
float imageWidth = 77;
float imageHeight = 77;
UIScreen *mainScreen = [UIScreen mainScreen];
//NSLog(@"%f",mainScreen.bounds.size.width);
// IPHONE 6
if(mainScreen.bounds.size.width == 375){
imageWidth = 92;
imageHeight = 92;
}
// IPHONE 6 PLUS
if(mainScreen.bounds.size.width == 414){
imageWidth = 102;
imageHeight = 102;
}
[self.imageManager requestImageForAsset:[self.arrayPhotoAssets objectAtIndex:indexPath.row]
targetSize:CGSizeMake(imageWidth, imageHeight)
contentMode:PHImageContentModeAspectFill
options:nil resultHandler:^(UIImage *result, NSDictionary* info){
UIImageView *sampleImage = (UIImageView *)[cell viewWithTag:1];
sampleImage.image = result;
}];
return cell;
}
UICollectionViewCell *cell;
return cell;
}
Definitiv verbessert, leichtes Flackern immer noch da, aber nicht mehr zwischen 2 Bildern. – ORStudios
Dieses Flackern ist auf eine Verzögerung zurückzuführen, zwischen dem Einstellen des Bildes von imageview auf nil, dem Herunterladen eines neuen Bildes und dem Zuweisen eines neuen Bildes zu imageview. Wenn Sie es vermeiden möchten, muss requestImageForAsset heruntergeladene Bilder zwischenspeichern. – azimov
Danke, ist das nicht, was "PHCachingImageManager" ist? Ich habe Caching-Bibliotheken angeschaut und das habe ich in früheren Versionen gemacht, aber ich dachte, ich würde dieses Mal stattdessen verwenden. – ORStudios