2010-03-15 3 views
1

저는 iPhone에서 개발 중이며 AppStore에서 이미지가 점진적으로 UITableView에 다운로드 된 것을 보았습니다 ... 어떻게 구현할 수 있습니까? 내 생각은 표시된 내용 (셀이 표시됨)을 감지하고 이러한 이미지를 다운로드하는 것이 었습니다. 내 문제는 보여진 세포를 어떻게 감지 할 수 있을지 모르겠다는 것입니다! 그것을하는 것이 좋은 방법입니까?UITableView에서 이미지를 점진적으로 다운로드

최저

답변

3

이 아이폰 개발자 테크 토크에서 증명 된 방법은 NSOperationNSOperationQueue를 사용하는 것이 었습니다.

아이디어는 NSOperation에 이미지 다운로드 요청 (NSURLRequest 사용)을 마무리하는 것입니다.

셀이 완료되면 콜백 수신자로 설정하여 이미지를 셀에 첨부 할 수 있습니다 (수동으로 그릴 수도 있고 이미지보기에 추가 할 수도 있음).

기본적으로 cellForRowAtIndexPath 메서드에서 이미지 다운로드를 시작하도록 셀에 지시하고 셀에 NSOperation을 만들어 테이블 뷰 컨트롤러 등에서 관리하는 작업 큐에 추가하도록합니다.

대기열이 작업 실행을 시작하고 완료되면 각 셀을 다시 호출합니다.

원할 경우 셀이 화면 밖으로 이동하면 작업을 취소 할 수 있으므로 셀이 이미지를 표시 할 수 없기 때문에 자원을 낭비하지 않고 버려집니다.

+0

내 문제는 어떻게 표시되는 셀을 감지합니까? – ncohen

+0

'tableView : cellForRowAtIndexPath :'메소드가 호출 된 후 셀이 표시됩니다. 그 이유는 표시 할 셀이 테이블 뷰에 제공되는 메소드이기 때문입니다. 셀 하위 클래스에서 이미지 다운로드를 캡슐화하는 NSOperation을 만드는 메서드를 가지고 테이블 뷰 컨트롤러 또는 다른 앱의 NSOperationQueue에 추가합니다. – Jasarien

+0

내가 디스플레이라고 말하면 화면에 보이는 것을 의미합니다 ... 앱 스토어를 보면 스크롤 뷰가 스크롤되어 이미지가 다운로드되었다는 것을 의미합니다! 표시된 셀을 어떻게 찾을 수 있습니까? – ncohen

0

@ Jasarien : 좋은 대답

또는 원하는 경우 three20 프로젝트를 사용할 수 있습니다. 이미 원하는 모든 것을 처리하는 TTTableViewController가 있습니다. 이미지 뷰와 비올라에 대한 URL 만 입력하면됩니다.

TT는 이미지를 메모리 또는 디스크에도 캐시합니다.

320 gitbub ressource에 번들로 제공되는 샘플 프로젝트를 확인하십시오. 거기에 예제가 있습니다.

+0

고마워요.하지만 이미 큰 부분을 다했습니다 ...하지 마세요. 다시 시작하고 싶다! – ncohen

+1

Three20은 제공하는 것을 많이 사용하려는 경우 훌륭하지만 Three20과 관련된 모든 작업이 TTStyle과 밀접하게 결합되어 있기 때문에 하나 또는 두 가지 기능 만 사용하려는 경우 많은 오버 헤드가 발생합니다. – Jasarien

1

Jasarien이 말한 기본 아이디어를 구현하는 방법은 여기 an example입니다. 그것은 귀하의 신청서의 필요에 따라 충분할 수 있으며, 일반적으로 그렇지 않은 경우 어떻게하는지에 대한 좋은 예입니다.

+0

고맙겠지 만 화면에 어떤 셀이 표시되는지 알 수있는 문제가 있습니다! – ncohen

+0

UIImageView에 대한 훌륭한 확장 기능입니다. (필자는 저 자신의 생각을 바랬습니다.)) 그러나 이것은 내가 설명한 NSOperation 메소드에 대한 상당히 다른 접근법입니다. 이것은 UIImageViews와 함께 사용하기에 탁월하지만 경우에 따라서는 UIImageView를 사용하여 셀이 매우 빠르게 스크롤되도록하려는 경우 다양한 뷰 계층 구조를 사용하여 너무 많은 성능 드래그가 발생할 수 있습니다. 이러한 경우 다중 스레드 접근 방식을 사용하는 것이 더 적합합니다. – Jasarien

1

각 셀을 UITableViewCell의 하위 클래스로 구현 한 다음 서브 클래스에서 willMoveToWindow: method을 재정의합니다. willMoveToWindow : 셀 뷰가 화면에 표시되거나 화면에서 사라지는 경우 호출됩니다 (newWindow는 nil을 가져옵니다). 그런 다음 각 셀은 이미지가 표시 될 때 이미지를로드하라는 요청을 큐에 넣을 수 있습니다 (화면에서 벗어난 경우 대기중인 요청을 취소 할 수도 있습니다).

현재, UITableView의 visibleCells property을 사용하면 표시되는 셀 목록을 가져올 수 있습니다.

+0

Thx visibleCell이 내가 원하는 것을 정확히 찾았습니다! – ncohen

관련 문제