2011-06-14 2 views
1

CalcBot과 비슷한 UI를 만들려고합니다. 손가락으로 뷰 컨트롤러를 당겨 볼 수 있으며 숨겨진 배경 뷰를 나타냅니다.UIScrollView, CalcBot과 비슷한 효과를 내림

나는 이것이 UIScrollView로 이루어 졌다고 생각하지만, 예를 들어 2x Horizontal보기를 가지고 정확한 방법을 찾아 낼 수 없다.

Example of what I am trying to achieve

나는 나는 그냥 수직 스크롤과 화면 1 풀을 만들 수있는 방법을 함께 붙어있어, 수평 스크롤이 잘 작동해야합니까.

어떤 조언이나 조언을 부탁드립니다.

감사 아론

+0

아무에게도 제안이 없나요? – MonkeyBlue

답변

4

당신은 중첩 된 수 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); 
    } 
} 
+0

안녕하세요, 도움을 주셔서 감사합니다이 코드는 내 요구에 완벽하고 정말 잘 작동합니다. 난 1 - 3에서 vScrollView에있을 때 지금은 하나의 사소한 문제가 있습니다. 스크린 3에있을 때 화면 2로 넘어갈 수 있습니다. 감사합니다 Aaron – MonkeyBlue

+0

원본 답변에서 지적했듯이'scrollViewDidEndDecelerating :'을 구현하면 view3에서 view2 로의 스크롤을 방지 할 수 있습니다. 몇 가지 코드를 추가하여 설명하십시오. – roop

+0

이것에 대한 모든 도움에 완벽한 감사합니다. :) – MonkeyBlue