2016-08-27 2 views
0

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

getestet
sampleImage.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; 

} 

Antwort

1

Ich würde Ihnen empfehlen sampleImage.image = nil zu setzen, bevor Sie versuchen, requestImageForAsset zu nennen. Dadurch wird die Bildansicht gelöscht, sodass das Flackern entfernt wird.

UIImageView *sampleImage = (UIImageView *)[cell viewWithTag:1]; 
sampleImage.image = nil; 

[self.imageManager requestImageForAsset:[self.arrayPhotoAssets objectAtIndex:indexPath.row] 
           targetSize:CGSizeMake(imageWidth, imageHeight) 
           contentMode:PHImageContentModeAspectFill 
            options:nil resultHandler:^(UIImage *result, NSDictionary* info){ 

             sampleImage.image = result; 
          }]; 
+0

Definitiv verbessert, leichtes Flackern immer noch da, aber nicht mehr zwischen 2 Bildern. – ORStudios

+0

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

+0

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

0

Einstellung "isSynchronous" true in den Optionen requestImage geben (PHImageRequestOptions) befestigt ist für mich das Flimmern.

Verwandte Themen