2014-10-21 6 views
0

모두. 나는 UI 프로그래밍의 초보자이며 스크롤바 위/아래로 스크롤하여 숨길 수있는 TabBar로보기에 문제가있다. (조회는 pinterest와 유사합니다 ...)UITabBarController를 사용하여 "전체 화면으로 스크롤"할 수 있습니까?

나는 철저하게 웹에서 검색했으며 이와 같은 라이브러리를 발견했습니다. YIFullScreenScroll from GitHub

그러나이 샘플에서는 TabBar 및 ToolBar가 화면 맨 위에 나타나고 사라지고 화면 중간에서 작동하지 않는 것으로 보입니다.

정말 툴바의도 스크롤 뷰의 중간에 숨겨진를 TabBar의를 제어하는 ​​방법에 대해 설명합니다. 알고 싶습니다

(처럼 클립을 ...) 사전에 내 지저분한 글에 대한

사과 ...

하지만 제발 도와주세요 !!!

답변

1

저는 Pinterest에 익숙하지 않아서 당신이하려고하는 것을 정확히 이해했기를 바랍니다.
저는 다소 객관적으로 새로운 것 같습니다. 아마도 훨씬 간단한 방법 일 수 있습니다.

나는 영어 원어민이 아니기 때문에 설명이 불완전하면 말해 주겠다. 나는 그 말을 바꿔 볼 것입니다.

첫째,있는 UIScrollView 위임을 준수하고, 탭 표시 줄 및 탐색 표시 줄 또한

의 원래 프레임을 잡고 2 개 속성을 생성, 인터페이스 빌더 또는 코드 중, 뷰 컨트롤러로 사용자의 스크롤 뷰의 대리자를 설정

ViewController.m 
@interface ViewController() <UIScrollViewDelegate> 
@property (nonatomic) CGRect navBarFrame; 
@property (nonatomic) CGRect tabBarFrame; 
@end 

그런 다음,있는 viewDidLoad에서, 위의 속성

- (void)viewDidLoad { 
    [super viewDidLoad] 
    self.navBarFrame = self.navigationController.navigationBar.frame; 
    self.tabBarFrame = self.tabBarController.tabBar.frame; 
} 

이제 우리는 스크롤 뷰의 위임 메타를 사용 설정 od가 스크롤이 시작된시기를 결정합니다.

먼저 우리는 스크롤 탭을 표시하기 위해 종료 될 때

- (void)scrollViewDidBeginDragging:(UIScrollView *)scrollView 
{ 
     [UIView animateWithDuration: 0.3 
         delay: 0 
        options: UIViewAnimationOptionCurveLinear 
       animations: ^(void){ 
        CGFloat tabBarX = self.tabBarController.tabBar.frame.origin.x; 
        CGFloat tabBarWidth = self.tabBarController.tabBar.frame.size.width; 
        CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height; 
        self.tabBarController.tabBar.frame = CGRectMake(tabBarX, self.view.frame.size.height, tabBarWidth, tabBarHeight); 

        CGFloat navBarX = self.navigationController.navigationBar.frame.origin.x; 
        CGFloat navBarWidth = self.navigationController.navigationBar.frame.size.width; 
        CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height; 
        self.navigationController.navigationBar.frame = CGRectMake(navBarX, 0, navBarWidth, navBarHeight); 
       } 
       completion: ^(BOOL finished){ 
        if(finished){ 
         [self.tabBarController.tabBar setHidden: YES]; 
         [self.navigationController.navigationBar setHidden: YES]; 
        } 
       }]; 
} 

이제 우리는 결정이 위임 방법을 사용하는 탐색 및 탭 표시 줄을 숨기려면, 스크롤이 시작될 때 호출되는 대리자로 시작 막대 및 탐색 모음을 다시 엽니 다.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
if(!decelerate){ 

    [self.tabBarController.tabBar setHidden: NO]; 
    [self.navigationController.navigationBar setHidden: NO]; 

    [UIView animateWithDuration: 0.3 
        animations: ^(void){ 
         self.tabBarController.tabBar.frame = self.tabBarFrame; 
         self.navigationController.navigationBar.frame = self.navBarFrame; 
        }]; 
     } 
} 


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    [self.tabBarController.tabBar setHidden: NO]; 
    [self.navigationController.navigationBar setHidden: NO]; 

    [UIView animateWithDuration: 0.3 
        animations: ^(void){ 
         self.tabBarController.tabBar.frame = self.tabBarFrame; 
         self.navigationController.navigationBar.frame = self.navBarFrame; 
       }]; 
} 

우리가이 별도의 메소드를 호출하는 이유는 사용자가 스크롤 뷰는 여전히 스크롤 경우에도 (당신이 정말로 빠르게 스크롤 할 때처럼, 스크롤을 중지 할 때마다 첫 번째 호출지고 있다는 것입니다, 그리고 당신은 스크롤을 중지 스크롤 뷰는 여전히 완전히 정지 할 때까지 몇 초 동안 계속 스크롤됩니다.
첫 번째 메소드에는 스크롤이 여전히 스크롤되는지 확인하는 'decelerate'변수도 있습니다.
스크롤 막대가 여전히 스크롤되는 동안 탭 막대와 탐색 막대를 표시하고 싶지 않았기 때문에
첫 번째 방법은 '감속'이 잘못된 경우에만 탐색 및 탭 막대를 다시 표시하는 코드를 실행합니다. 스크롤이 중지 된 것을 의미하는

두 번째 방법은 사용자가 스크롤을 중지 한 후에 스크롤보기를 수행 한 경우와 스크롤이 끝난 후에 만 ​​호출됩니다.
그런 다음 위와 동일한 코드를 실행하여 탭과 탐색 모음을 다시 표시합니다.

우리가 기본적으로하는 일은 탭과 탐색 모음의 프레임을보기 밖으로 이동하거나보기로 이동시키는 애니메이션을 만드는 것입니다.

임의로 애니메이션 길이를 0.3으로 설정했습니다. 바가 더 빨리 또는 더 느리게 표시되거나 숨겨 지도록하려면 다소 시간을 바꿀 수 있습니다.

행운을 빌어 요.

+0

출처를 알려 주셔서 감사합니다. 당신의 설명이 충분히 명확해서 더 이상 구술을 쓸 필요가 없었습니다 .... 나는 당신이 준 방법을 시험해 보았습니다. 그러나 '- (void) scrollViewDidEndDragging : (UIScrollView *) scrollView willDecelerate : (BOOL) 메소드를 감속 시키면 애니메이션이 조금 이상하게 보입니다. 당신이 제안하는대로, 나는 또 다른 방법을 사용할 것입니다. 어쨌든, 정말 고마워요 !!!! –

+0

멋진 코드 조각, 매력처럼 작동합니다! – loretoparisi

관련 문제