저는 iPhone에서 개발 중이며 AppStore에서 이미지가 점진적으로 UITableView에 다운로드 된 것을 보았습니다 ... 어떻게 구현할 수 있습니까? 내 생각은 표시된 내용 (셀이 표시됨)을 감지하고 이러한 이미지를 다운로드하는 것이 었습니다. 내 문제는 보여진 세포를 어떻게 감지 할 수 있을지 모르겠다는 것입니다! 그것을하는 것이 좋은 방법입니까?UITableView에서 이미지를 점진적으로 다운로드
최저
저는 iPhone에서 개발 중이며 AppStore에서 이미지가 점진적으로 UITableView에 다운로드 된 것을 보았습니다 ... 어떻게 구현할 수 있습니까? 내 생각은 표시된 내용 (셀이 표시됨)을 감지하고 이러한 이미지를 다운로드하는 것이 었습니다. 내 문제는 보여진 세포를 어떻게 감지 할 수 있을지 모르겠다는 것입니다! 그것을하는 것이 좋은 방법입니까?UITableView에서 이미지를 점진적으로 다운로드
최저
이 아이폰 개발자 테크 토크에서 증명 된 방법은 NSOperation
및 NSOperationQueue
를 사용하는 것이 었습니다.
아이디어는 NSOperation에 이미지 다운로드 요청 (NSURLRequest 사용)을 마무리하는 것입니다.
셀이 완료되면 콜백 수신자로 설정하여 이미지를 셀에 첨부 할 수 있습니다 (수동으로 그릴 수도 있고 이미지보기에 추가 할 수도 있음).
기본적으로 cellForRowAtIndexPath
메서드에서 이미지 다운로드를 시작하도록 셀에 지시하고 셀에 NSOperation을 만들어 테이블 뷰 컨트롤러 등에서 관리하는 작업 큐에 추가하도록합니다.
대기열이 작업 실행을 시작하고 완료되면 각 셀을 다시 호출합니다.
원할 경우 셀이 화면 밖으로 이동하면 작업을 취소 할 수 있으므로 셀이 이미지를 표시 할 수 없기 때문에 자원을 낭비하지 않고 버려집니다.
@ Jasarien : 좋은 대답
또는 원하는 경우 three20 프로젝트를 사용할 수 있습니다. 이미 원하는 모든 것을 처리하는 TTTableViewController가 있습니다. 이미지 뷰와 비올라에 대한 URL 만 입력하면됩니다.
TT는 이미지를 메모리 또는 디스크에도 캐시합니다.
320 gitbub ressource에 번들로 제공되는 샘플 프로젝트를 확인하십시오. 거기에 예제가 있습니다.
Jasarien이 말한 기본 아이디어를 구현하는 방법은 여기 an example입니다. 그것은 귀하의 신청서의 필요에 따라 충분할 수 있으며, 일반적으로 그렇지 않은 경우 어떻게하는지에 대한 좋은 예입니다.
고맙겠지 만 화면에 어떤 셀이 표시되는지 알 수있는 문제가 있습니다! – ncohen
UIImageView에 대한 훌륭한 확장 기능입니다. (필자는 저 자신의 생각을 바랬습니다.)) 그러나 이것은 내가 설명한 NSOperation 메소드에 대한 상당히 다른 접근법입니다. 이것은 UIImageViews와 함께 사용하기에 탁월하지만 경우에 따라서는 UIImageView를 사용하여 셀이 매우 빠르게 스크롤되도록하려는 경우 다양한 뷰 계층 구조를 사용하여 너무 많은 성능 드래그가 발생할 수 있습니다. 이러한 경우 다중 스레드 접근 방식을 사용하는 것이 더 적합합니다. – Jasarien
각 셀을 UITableViewCell의 하위 클래스로 구현 한 다음 서브 클래스에서 willMoveToWindow: method을 재정의합니다. willMoveToWindow : 셀 뷰가 화면에 표시되거나 화면에서 사라지는 경우 호출됩니다 (newWindow는 nil을 가져옵니다). 그런 다음 각 셀은 이미지가 표시 될 때 이미지를로드하라는 요청을 큐에 넣을 수 있습니다 (화면에서 벗어난 경우 대기중인 요청을 취소 할 수도 있습니다).
현재, UITableView의 visibleCells property을 사용하면 표시되는 셀 목록을 가져올 수 있습니다.
Thx visibleCell이 내가 원하는 것을 정확히 찾았습니다! – ncohen
호출되어 LazyTableView ... 당신은
http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html
이 링크를 통해 이동하고 게으른 테이블 뷰로드를 통합하여보십시오, 당신 출력을 달성 할 수있다 여기에서 자습서를 GT는 수 즉, 변경 http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ 다운로드 버튼 클릭 방식에서 ProgressiveImageDownloadViewController의 URL.
내 문제는 어떻게 표시되는 셀을 감지합니까? – ncohen
'tableView : cellForRowAtIndexPath :'메소드가 호출 된 후 셀이 표시됩니다. 그 이유는 표시 할 셀이 테이블 뷰에 제공되는 메소드이기 때문입니다. 셀 하위 클래스에서 이미지 다운로드를 캡슐화하는 NSOperation을 만드는 메서드를 가지고 테이블 뷰 컨트롤러 또는 다른 앱의 NSOperationQueue에 추가합니다. – Jasarien
내가 디스플레이라고 말하면 화면에 보이는 것을 의미합니다 ... 앱 스토어를 보면 스크롤 뷰가 스크롤되어 이미지가 다운로드되었다는 것을 의미합니다! 표시된 셀을 어떻게 찾을 수 있습니까? – ncohen