2016-08-27 2 views
0

UICollectionView에 문제가있어 다음 영역으로 좁혔습니다. 문제는 UICollectionView에서 다시로드를 호출 할 때 깜박임이 발생하고 1 개의 이미지가로드 된 다음 올바른 이미지가 두 번째로로드된다는 것입니다. 거의 새로운 셀을 스크롤하면 아무런 스크롤없이 새 셀을 스크롤 할 때와 비슷합니다.다시로드 할 때 UICollectionView가 깜박이며 requestImageForAsset을 호출하는 중

는 지금은 일반

sampleImage.image = [UIImage imageNamed:@"LogoHome"]; 

으로 테스트했습니다 그리고 난 전혀 깜박임 그래서 난

의 내부에 다음 코드

[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; 

            }]; 

로 좁혀없는 한 수

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

위와 같은 일이 발생하지 않도록 코드를 조정할 수있는 방법이 있습니까? 여기에 전체 코드 조각은 다음과 같습니다

- (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; 

} 

답변

1

내가 requestImageForAsset를 호출하기 전에, sampleImage.image = nil을 설정할 수 추천 할 것입니다. 이렇게하면 깜박임을 제거하는 것과 같은 이미지보기가 지워집니다. requestImage (PHImageRequestOptions)에 전달 된 옵션에 참으로 "isSynchronous 설정"

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

확실히 개선되었지만 여전히 약간의 깜박임이 있지만 더 이상 2 장의 이미지 사이를 비벼 지 않습니다. – ORStudios

+0

깜박임은 지연 때문에, imageview의 이미지를 nil로 설정하는 것과 새 이미지를 다운로드하는 것, 그리고 새로운 이미지를 imageview에 할당하는 것입니다. 이를 피하려면 requestImageForAsset이 다운로드 한 이미지를 캐시해야합니다. – azimov

+0

고마워요. "PHCachingImageManager"가 필요한 것이 아닙니까? 라이브러리 캐싱을보고 있었고 이전 버전에서했던 것입니다. 그러나 이번에는 위의 코드를 대신 사용할 것입니다. – ORStudios

0

은 나를 위해 깜박 고정.