ipad 용으로 설계된 IOS 애플리케이션이 있습니다. 한 페이지에서 사용자에게 보고서를 표시하고 보고서에 UIScrollView 내부의 화면에 5000 개의 UILabel이 렌더링되어야합니다. 이로 인해 응용 프로그램이 메모리 부족으로 인해 중단됩니다. UITableView에는 필요에 따라 내용을로드하는 기능이 있습니다. 스크롤 뷰를 특정 콘텐츠에만 렌더링하도록하려면 어떻게해야합니까? 스크롤 할 때 보이지 않는 콘텐츠를 제거하고 표시되어야하는 콘텐츠를 추가 할 수 있습니까?스크롤로 UIScrollView 데이터를로드하는 방법
답변
사용자 정의 행 (여러 개의 레이블로 구성된 행)의 테이블보기를 사용하도록 재구성 할 수 있습니까? 이 모델은 매우 자연스러운 방식으로로드 온 디맨드 및 리소스 재사용을 지원합니다 ...
아마도 화면 레이아웃에 더 구체적 일 수 있습니까?
아니요. UIScrollView를 사용하는 것이 필수입니다. – neo
테이블보기가 표 셀을 재활용하는 것처럼 레이블을 다시 순환 (즉, 재사용)해야합니다. 이것은 종종 "타일링"서브 뷰라고합니다. 타일링을 사용하면 메모리에 저장되는 것 이상을 표시 할 수 있습니다.
WWDC 2012 세션 104를 시청하는 것이 좋습니다.이 세션의 자습서는 UIScrollView에서 이미지보기를 바둑판 식으로 배열하는 사진 앱을 만듭니다. 사진 응용 프로그램은 항목 그리드가 아닌 콘텐츠 페이지를 스크롤하지만 비디오가 귀하의 응용 프로그램과 관련 될 수 있다고 생각합니다.
(1.) 레이블의 트랙을 유지 인스턴스 변수 선언 :
여기에 특정 경우에 적용 튜토리얼의 매우 간략한 개요입니다
NSMutableSet *recycledLabels;
NSMutableSet *visibleLabels;
(2) 방법을 구현을 그
- (UILabel *)dequeueRecycledLabel;
(3) 타일링을하는 방법을 구현 :
를 재사용 가능한 라벨을 가져옵니다- (void)tileLabels; // this will add/remove labels from the scroll view
(4.) 당신의 스크롤 뷰의 대리자를 설정하고 scrollViewDidScroll에 tileLabels 전화 : 위임 방법 WWDC 비디오는 당신은 내가 당신의 사건에 적용 할 수있는 생각 세부 사항을 기입 도움이 될 것입니다
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self tileLabels];
}
. 그러나, 당신은 당신의 특정한 경우에 효과가 있도록 즉흥 연주를 많이해야 할 것입니다. 이것은 쉽지 않을 수 있습니다. 그러나 그것의 행실.
비디오의 끝 부분에서 CATileLayer로 타일링에 대해 설명합니다. 솔직히 말해서, 나는 그 부분을 이해하지 못했다. 그러나 큰 이미지를 표시하지 않기 때문에 귀하의 경우에는 해당되지 않는다고 생각합니다.
비디오를 찾을 수 없습니다. URL을 제공 할 수 있습니까? – neo
마지막으로 동적 콘텐츠로드를 구현했습니다. 구현 한 방법은 입니다. scrollViewDidScroll입니다. 이 방법은 내부 그때 내가 따라 표시되는 콘텐츠 사각형을 결정한 다음
bool isUp = (currentOffset.y > lastScrollOffset);
스크롤 방향을 결정 하였다.
CGRect visibleContentRect;
visibleContentRect.origin = scrollView.contentOffset;
visibleContentRect.size = scrollView.bounds.size;
그럼 프레임 배열이 설정되어 있기 때문에 뷰 요소 배열이 있으며 각 요소가 스크롤 뷰에서 해당 위치를 알고있었습니다. 간단히 말해, 스크롤이 발생할 때마다 프레임이 보이는 내용 프레임에 의해 교차되거나 포함 된보기가 결정되었습니다.나는 그보기를 스크롤보기에 추가했다. 나는 또한 사라진 것들을 결정하고 스크롤보기에서 그들을 제거하고 나는 또한 그 견해를 없애고 그들을 재창조했다. [scrollView addSubview :보기] 메서드가 호출되면 뷰는 메모리에 더 많은 공간을 확보하기 때문에 표시됩니다. [view removeFromSuperView] 메서드는 해당 공간을 할당 해제하지 않습니다. 그래서 뷰를 nil로 설정하고 다시 생성해야합니다.
- 1. 오른쪽에서 왼쪽 스크롤로 UIScrollView 잠그기
- 2. 스크롤로 안드로이드 다이내믹리스트 뷰
- 3. 스크롤로 페이지 컨트롤 이미지
- 4. 마우스 스크롤로 전환 설정하는 방법
- 5. HDFS에서 하이브로 데이터를로드하는 방법
- 6. 통합 테스트 데이터를로드하는 방법
- 7. 웹에서 안드로이드에 데이터를로드하는 방법
- 8. 자동으로 하이브에 데이터를로드하는 방법
- 9. SQLLoader CSV에서 데이터를로드하는 방법
- 10. ckeditor onload에 데이터를로드하는 방법
- 11. Cassandra 테이블에서 데이터를로드하는 방법
- 12. 테이블 뷰에 데이터를로드하는 방법
- 13. 데이터리스트에 데이터를로드하는 방법
- 14. Json 데이터를로드하는 방법
- 15. UIScrollView의 UIScrollView, UIScrollView 탭 이벤트를 얻는 방법
- 16. 스크롤 후 UITableView에 더 많은 데이터를로드하는 방법
- 17. UIScrollView 내에서 UIScrollView 내의 UIScrollView
- 18. UIScrollView 내 UIScrollView 내부의 UIScrollView
- 19. mysql - 다른 구성에서 데이터를로드하는 방법
- 20. Ajax에서 기존 배열로 데이터를로드하는 방법
- 21. mysql에서 PHP의 나머지 데이터를로드하는 방법
- 22. jQueryEasyUI treegrid에서 XML 데이터를로드하는 방법
- 23. 돼지를 사용하여 hbase에서 데이터를로드하는 방법
- 24. 테이블 레이아웃에 거대한 데이터를로드하는 방법
- 25. 내 NSMutableDictionary에서 UITableView로 데이터를로드하는 방법
- 26. 데이터를로드하는 방법 Windows Phone에서 비동기
- 27. Java에서 Oracle DB로 데이터를로드하는 방법
- 28. 모델에서 데이터를로드하는 가장 좋은 방법
- 29. 고급 데이터 표에서 데이터를로드하는 방법
- 30. 별도의 양식에 mysql 데이터를로드하는 방법
당신이 요구 한 것은 정확히 UITableView 또는 UICollectionView 사용의 요점입니다. UIScrollView 대신에 이것을 사용해야하며, 원하는만큼의 데이터 요소를 처리 할 수 있습니다. –
UIScrollView를 사용해야한다는 요구 사항이 있습니다. 그렇지 않으면 나는이 질문을하지 않을 것이다. – neo
UIScrollView를 사용해야하는 이유를 이해하는 것이 유용 할 것입니다. 콜렉션 뷰에 이미 빌드 된 것과 동일한 기능을 사용하기 위해 커스텀 로직을 많이 작성하게 될 것입니다. –