2013-09-30 2 views
1

큰 이미지를 많이로드하는 앱이 있습니다. 게으른로드를하고 이미지가로드 된 후에도 화면에서 손가락을 뗄 때까지 셀에로드되지 않습니다. 나는 UIScrollViewDelegate 방법 scrollViewDidEndDraggingdownloadImageForVisiblePaths 함수를 호출하고이 따로 scrollViewDidEndDecelerating에, 나 또한 그렇게처럼 UITableViewcellForRowAtIndexPath 방법으로 이미지를 설정하고있다 :UITableView 느린로드 이미지가 손가락이 꺼질 때까지로드되지 않습니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

//  Code to load reusable custom cell 

CustomObject *object = (CustomObject*) [self.tableArray objectAtIndex: indexPath]; 

if(!object.mainImage){ 

    [self downloadImageForIndexPath:indexPath]; 

    cell.mainImageView.image = [UIImage imageNamed:@"placeholder"]; 

}else{ 

    cell.mainImageView.image = object.mainImage; 

} 

    return cell; 
} 

downloadImageForIndexPath은 다음과 같습니다 여기서

-(void) downloadImageForIndexPath:(NSIndexPath*) indexPath{ 

    UIImage *loadedImage = [[UIImage alloc] init]; 

    // take url and download image with dispatch_async 

    // Once the load is done, the following is done 

    CustomCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    cell.mainImageView.image = loadedImage; 

    CustomObject *object = (CustomObject*) [self.tableArray objectAtIndex: indexPath]; 

    object.mainImage = loadedImage; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.tableVIew reloadData]; 
     }); 
} 

어디서 잘못 될지 알 수 없습니다. 손가락이 화면에 있더라도 이미지를로드해야합니다. 이 동작은 Google+, Instagram 또는 Facebook과 같은 앱에서 이미지가로드되는 방식과 유사합니다.

모든 포인터가 많이 감사하겠습니다.

답변

2

downloadImageForIndexPath의 코드를 모두 포함하지 않았기 때문에 말하기는 어렵지만 배경 스레드의 셀에 이미지를 지정하는 것처럼 보입니다. 백그라운드 스레드에서 UI 컨트롤을 터치하면 안됩니다. 또한 셀을 직접 업데이트하는 경우 reloadData에 전화 할 필요가 없습니다.

SDWebImage을 사용하여 테이블 뷰에 원격 이미지를 표시하는 것이 좋습니다.

+0

이 잘 나는 실제로 주 스레드에서 이미지를 설정하고 배경 만 스레드에서 이미지를 얻고있다. 지금 SDWebImage를 시험 중입니다. 어떻게 진행되는지 알려 드리겠습니다. –

+0

SDWebImage 완벽하게 작동합니다. 하나의 질문. 사과를 출시하려고 할 때 비공개 선별자를 사용하는 것에 대한 경고를 사과가주지 않습니까? SDWebImage에서 –

+1

모든 공개하고 사용 앱 스토어에있는 많은 애플리케이션이있다. – iRaivis

관련 문제