3

이미지가로드되기 전에 UIActivityIndicator가 셀에 표시되는 UICollectionView가 있습니다. 그러면 UIImageView + AFNetworking 블록에서 성공 또는 실패 여부와 상관없이 해제됩니다. 그러나 때로는 애니메이션 활동을 숨기거나 멈추지 않는 남은 활동 지표가 있습니다.UICollectionView 셀의 UIActivityIndicator가 임의로 숨겨지지 않습니다.

이 내 cellForItemAtIndexPath의 일부입니다

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
... 
NSURL *imageURL = [NSURL URLWithString:[tmpcamera objectForKey:@"url"]]; 
NSURLRequest *imageRequest = [NSURLRequest requestWithURL:imageURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10]; 

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
activityIndicator.hidesWhenStopped = YES; 
activityIndicator.hidden = NO; 
activityIndicator.frame = CGRectMake(0, 0, 130, 110); 
activityIndicator.tag = 10; 

[cell.imageView addSubview:activityIndicator]; 
[activityIndicator startAnimating]; 

__weak typeof(FavouriteCell) *weakImage = cell; 
[cell.imageView setImageWithURLRequest:imageRequest 
         placeholderImage:[UIImage imageNamed:@"trans50.png"] 
           success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *i) 
{ 
    [activityIndicator stopAnimating]; 
    activityIndicator.hidden = YES; 
    [activityIndicator removeFromSuperview]; 
    [weakImage.imageView setImage:i]; 

} 
           failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) 
{ 
    [activityIndicator stopAnimating]; 
    activityIndicator.hidden = YES; 
    [activityIndicator removeFromSuperview]; 
    [weakImage.imageView setImage:[UIImage imageNamed:@"errorimage.png"]]; 
}]; 
... 
} 

이 코드는 문제가 무엇인지 디버깅하기에 충분하지만, 어떤 아이디어를 주시면 감사하겠습니다 만약 내가 확실 해요.

내가 무슨 말의 샘플 스크린 샷은 여기에 있습니다 : 당신의 세포가 재생 될 수 있기 때문에

sample

답변

3

/이미지 요청에 대한 성공하거나 스크롤을 통해 (실패 할 수있는 기회를 가지고 전에 다시 예를 들어, 셀에 "고아"활동 표시기가 나타날 수 있습니다. 이벤트의

순서 :

  1. 셀로드 이미지를로드하려고 시도하고 이미지가로드되기 전에 작동 표시등을
  2. 사용자가 스크롤을 시작합니다. 셀이 재활용됩니다.
  3. 셀이 재사용됩니다. 새로운 활동 표시기가 추가되고 이전 이미지로드가 중단됩니다 (이전 성공/실패 블록이 호출되지 않습니다). 기존 활동 표시기와 새 활동 표시기가 이제는 셀에 있고, 이전 활동 표시기는 여전히 실행 중입니다.

    1. 가 활동 표시를 포함하는 사용자 정의 셀을 만들기 :

    제안이 문제를 방지 할 수 있습니다.

  4. 활동 표시자는 다음 이미 viewWithTag 통해 작동 표시가 있는지 조회 표시기 태그의 속성에 번호를 할당하기 : 셀을 재사용하는 경우. 이미 존재하는 경우 기존의 것을 사용하고, 그렇지 않으면 새로운 것을 작성하십시오.
+0

감사합니다! 내가 그것을 다시 일으키기 위해 잡아 당기기를 사용하고있는 것처럼 스크롤을 일으키는 것으로 가정합니다. 그리고 내가 아주 빨리 그것을 할 때만 일어납니다. 나는 너의 제안을 시도 할 것이다. –

+0

두 제안 사항은 대안으로 사용됩니다. 셀에 활동 지표 아이디어를 추가하거나 태그 속성을 사용하여 기존 활동 지표를 추적 할 수 있습니다. :) – dmercredi

+0

는 또한 UICollectionViewCell의 prepareForReuse 메서드를 재정하여 몇 가지 정리를 작동 할 수있다. dmercredi의 # 1 제안 (권장)을 따르고 있었다면 stopAnimating을 호출 한 다음 activityIndicator를 숨길 수 있습니다. –

관련 문제