당신은 중첩 된 수 scrollviews는 두 방향으로 작업을 스크롤 얻을 수 있습니다. 가로 스크롤러 안에 세로 스크롤러가 있습니다 (다른 방향으로 돌릴 수도 있지만). 그래서 뷰 3과 뷰 1은 뷰 2와 함께 가로 스크롤러 내부에 들어가는 세로 스크롤 뷰에 들어갑니다.
코드에서 이러한 뷰 계층 구조를 만들 수 있습니다 (기본 viewcontroller의 viewDidLoad
). 다음 스 니펫은 view1, view2 및 view3을 웹 뷰로 가정합니다.
CGRect bounds = self.view.bounds;
// main guy is a horizontal scroller
UIScrollView *hScrollView = [[UIScrollView alloc] initWithFrame:bounds];
hScrollView.contentSize = CGSizeMake(bounds.size.width * 2, bounds.size.height);
hScrollView.delegate = self;
[self.view addSubview:hScrollView];
// the horizontal scroller contains a vertical scroller
UIScrollView *vScrollView = [[UIScrollView alloc] initWithFrame:bounds];
vScrollView.contentSize = CGSizeMake(bounds.size.width, bounds.size.height * 2);
vScrollView.delegate = self;
[hScrollView addSubview:vScrollView];
// add view3 and view1 to the vertical scroller
UIWebView *view3 = [[UIWebView alloc] initWithFrame:bounds];
[view3 loadHTMLString:@"<h1>3</h1>" baseURL:nil];
[vScrollView addSubview:view3];
UIWebView *view1 = [[UIWebView alloc] initWithFrame:CGRectOffset(bounds, 0, bounds.size.height)];
[view1 loadHTMLString:@"<h1>1</h1>" baseURL:nil];
[vScrollView addSubview:view1];
vScrollView.contentOffset = CGPointMake(0, bounds.size.height);
// add view2 to the horizontal scroller
UIWebView *view2 = [[UIWebView alloc] initWithFrame:CGRectOffset(bounds, bounds.size.width, 0)];
[view2 loadHTMLString:@"<h1>2</h1>" baseURL:nil];
[hScrollView addSubview:view2];
// enable paging in both directions
hScrollView.pagingEnabled = TRUE;
vScrollView.pagingEnabled = TRUE;
이렇게하면 양방향으로 스크롤 할 수 있지만 view3에서 view2로 스크롤 할 수 있습니다. 이를 방지하려면 vScollView
에 view3이 표시 될 때마다 hScrollView
에서 스크롤을 사용 중지해야합니다. 대의원의 scrollViewDidEndDecelerating:
에서 vScrollView
의 작업을 수행 할 수 있습니다. 다음과 같음 :
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (scrollView == self.verticalScrollView) {
self.horizontalScrollView.scrollEnabled = (self.verticalScrollView.contentOffset.y > self.view.bounds.origin.y);
}
}
아무에게도 제안이 없나요? – MonkeyBlue