내 iPhone 앱에는 최대 200 개의 하위 뷰 (150 x 150)를 포함 할 수있는 스크롤 뷰 pagingEnabled=NO
이 있으며 도전 과제는 지연로드를 수행하고 수평으로 끝이없는 스크롤링 (튀어 오름)을 시뮬레이트하는 것입니다. 지도.Objective-C : pagingEnabled가없는 끝이없는 UIScrollView
이 요청에 대한 해결책이 있습니까?
내 iPhone 앱에는 최대 200 개의 하위 뷰 (150 x 150)를 포함 할 수있는 스크롤 뷰 pagingEnabled=NO
이 있으며 도전 과제는 지연로드를 수행하고 수평으로 끝이없는 스크롤링 (튀어 오름)을 시뮬레이트하는 것입니다. 지도.Objective-C : pagingEnabled가없는 끝이없는 UIScrollView
이 요청에 대한 해결책이 있습니까?
스크롤 뷰의 지연로드는 Apple의 샘플 코드 프로젝트 중 하나 인 PageControl에서 증명됩니다.
끝없는 스크롤을 가짜로 만들려면 스크롤보기를 매우 넓게 만드는 것이 좋습니다. 평균적인 사람보다 넓은 스크롤 동작 세트에서 스크롤하는 것이 좋습니다. 그런 다음 대리자 메서드 -scrollViewDidEndScrollingAnimation:
, -scrollViewDidEndDragging:willDecelerate:
및 -scrollViewDidEndDecelerating:
(사용자가 스크롤을 마친 후에 하나 이상의 뷰어가 호출 됨)에서 스크롤 뷰 가운데에 콘텐츠가 위치하도록 위치를 바꾸고 애니메이션 처리하지 않고 contentOffset
포인트를 업데이트합니다.
시각적으로 작동하려면 수평 스크롤러를 비활성화해야합니다. 또한 contentOffset.x
을 스크롤 뷰의 경계로 더 이상 나눌 수 없기 때문에 특정 방법으로 어떤 뷰를 그릴 것인지 결정할 방법을 고려해야합니다. contentOffset
.
안녕하세요. 방법을 찾았습니다. 나는 모든 하위 뷰를 가진 마스터 배열을 가지고있다 (내 경우에는 이미지이므로 이름을 저장한다). scrollview에는 left, current, right의 세 가지 하위보기 만 있습니다. 페이징을 사용할 수 있으므로 사용자는 언제든지 한 번에 하나의보기를 왼쪽/오른쪽으로 돌릴 수 없습니다. 내가하는 일 : 1) 마스터 배열에서 현재 위치를 추적합니다. 그가 왼쪽으로 움직인다면 1을 뺀다. 오른쪽에 하나 추가하십시오.
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[some code to determine current page, based on contentOffset]
if (page == 0){
NSLog(@"Going left");
if (currentPage > 0){
currentPage--;
} else {
//cycle to last
currentPage = [images count] -1;
}
} else if (page == 2){
NSLog(@"Going right");
if (currentPage < ([images count] -1)){
currentPage++;
} else {
//cycle to first
currentPage = 0;
}
} else{
NSLog(@"Not moving");
}
2) 사용자가 이동 한 후에, I는 다음과 같이, 3 개 개의 새로운 이미지를 다시 :
//updates the 3 views of the scrollview with a new center page.
-(void) updateScrollViewForIndex:(NSInteger)newCenterPage{
//fist clean scroll view
for (UIView *sView in [scroll subviews]){
[sView removeFromSuperview];
}
NSInteger imgCount = [images count];
//set center view
[self loadImageIndex:newCenterPage atPosition:1];
//set left view
if (newCenterPage > 0){
[self loadImageIndex:newCenterPage-1 atPosition:0];
} else {
//its the first image, so the left one is the last one
[self loadImageIndex:imgCount-1 atPosition:0];
}
//set right view
if (newCenterPage < imgCount-1){
[self loadImageIndex:newCenterPage+1 atPosition:2];
} else {
//its the last image, so ther right one is the first one
[self loadImageIndex:0 atPosition:2];
}
}
3) 마지막으로 다시 중심 다시 중심 뷰 스크롤 뷰 :
이런[scroll setContentOffset:CGPointMake(1 * viewWidth, 0)];
"계획이있는 사람"이 길을 가리킨 클락 씨이지만 그래도 도움이 되길 바랍니다.
Gonso
매트 갤러거이 정확한 문제에 대한 해결책을 설명하는 blog post 있습니다. 나는 그것을 사용했고 그것은 훌륭하게 작동합니다.
Cocoa Touch의 UIScrollView 및 UIPageControl은 여러 패닝 페이지가있는 사용자 인터페이스를 허용합니다. Apple에서 제공하는 샘플 프로젝트 (PageControl)는 지연로드 된 배열의 모든 페이지에 대한 모든 하위 뷰를 유지합니다. 얼마나 많은 가상 페이지를 표현하고자하든 관계없이 두 개의 하위 뷰를 사용하여 구현할 수있는 방법을 설명하겠습니다.
하위보기를 뒤적 거리며 필요에 따라 내용을 재설정하여 작동합니다. 나는 플래시 카드를 보여주기 위해 이것을 사용했다. 3 ~ 3,000 개의 아이템이있을 수있다. 지금은 페이징을 위해 설정되었지만 정기적 인 스크롤로 작업 할 수 있다고 확신합니다.
잘못된 링크. 다음은 올바른 것입니다 : http://cocoawithlove.com/2009/01/multiple-virtual-pages-in-uiscrollview.html – jcayzac