0

ボタンがタッチされたときにUITabBarControllerとUINavigationControllerを同時に非表示にしようとしています。ここで非常に優れたコードスニペットを見つけました。uitabbarcontrollerを非表示にする方法ですが、UINavigationControllerとtabbarcontrollerの両方を非表示にしてアニメーション化しようとすると問題が発生します。また、インターネット上でタブバーを非表示にした例もたくさんありself.tabBarController.tabBar.hidden = YESますが、ボタンの項目のみが非表示になり、下部の黒いバーは非表示になりません。

たくさん遊んだ後、ウィンドウ全体のサイズをその場で変更するナビゲーションコントローラーの非表示に関連していると思うので、両方を正しくアニメーション化することができます。

-(IBAction)touchImage:(id)sender {

    if (isImageFullScreen) {

        isImageFullScreen = NO;

        [self.navigationController setNavigationBarHidden:NO animated:YES];
        [UIView transitionWithView:self.view
                          duration:0.5
                           options:UIViewAnimationOptionCurveLinear
                        animations:^
         {
             hotelImageButton.frame = CGRectMake(0,20,320,92);
             [self showTabBar:self.tabBarController];
         }
                        completion:^(BOOL finished)
         {
         }];

    } else {

        isImageFullScreen = YES;

        [self.navigationController setNavigationBarHidden:YES animated:YES];
        [UIView transitionWithView:self.view
                          duration:0.5
                           options:UIViewAnimationOptionCurveLinear
                        animations:^
         {
             hotelImageButton.frame = CGRectMake(0,0,320,480);
             [self hideTabBar:self.tabBarController];
         }
                        completion:^(BOOL finished)
         {                                  
         }];
    }

}

hiddenTabBarメソッドとshowTabBarメソッドは、上記でリンクした他の投稿のものです。

他の組み合わせも試してみましたが、見栄えが良くありません。何か案は?

前もって感謝します。

4

2 に答える 2

5

今すぐそのコードを試しましたが、UITabBarのショーアニメーションがスムーズに行われないことがわかりました。アニメーションを表示するタブバーの長さを低くするように調整することで、スムーズにすることができました。

[UIView setAnimationDuration:0.2];

うまくいけば、それはうまくいきます。

編集:このコードを試してみてください。バーのみが非表示になり、コンテンツが表示されるように、1つのアニメーショントランザクションで親ビューのサイズが大きくなります。

- (IBAction)TestButton1:(UIButton *)sender {

if(!isAnimating){
    if(isTabBarAndNavBarHidden){

        [UIView transitionWithView:self.view
                          duration:0.5
                           options:UIViewAnimationOptionTransitionNone
                        animations:^
         {
             isAnimating=YES;

             CGFloat statusBar_height=[[UIApplication sharedApplication] statusBarFrame].size.height;
             CGFloat screen_height=[UIScreen mainScreen].bounds.size.height;

             [self.tabBarController.view setFrame:CGRectMake(self.tabBarController.view.frame.origin.x, 0, self.tabBarController.view.frame.size.width, screen_height)];
             [self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.origin.x, statusBar_height, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)];
         }
                        completion:^(BOOL finished)
         {
             isTabBarAndNavBarHidden=NO;
             isAnimating=NO;
         }];

    }else{

        [UIView transitionWithView:self.view
                          duration:0.5
                           options:UIViewAnimationOptionTransitionNone
                        animations:^
         {
             isAnimating=YES;

             CGFloat statusBar_height=[[UIApplication sharedApplication] statusBarFrame].size.height;
             CGFloat screen_height=[UIScreen mainScreen].bounds.size.height;

             [self.tabBarController.view setFrame:CGRectMake(self.tabBarController.view.frame.origin.x, statusBar_height-self.navigationController.navigationBar.frame.size.height, self.tabBarController.view.frame.size.width, screen_height+self.navigationController.navigationBar.frame.size.height+self.tabBarController.tabBar.frame.size.height-statusBar_height)];
             [self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.origin.x, 0, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)];


         }
                        completion:^(BOOL finished)
         {
             isTabBarAndNavBarHidden=YES;
             isAnimating=NO;
         }];

    }
}

}

于 2012-10-29T16:18:39.663 に答える
0

このコードはiPhone4/4S用です。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (self.lastContentOffset > scrollView.contentOffset.y)
    {
          NSLog(@"Scrolling up");

        [UIView animateWithDuration:.5 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{



            [self.tabBarController.tabBar setFrame:CGRectMake(0, 430, 320, 50)];
             [self.navigationController.navigationBar setFrame:CGRectMake(0, 20, self.navigationController.navigationBar.frame.size.width,self.navigationController.navigationBar.frame.size.height)];

             } completion:
           ^(BOOL finished) {

                [UIView animateWithDuration:.5 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{


                      } completion:^(BOOL finished) {
                              //
                        }];

            }];

    }
    else if (self.lastContentOffset < scrollView.contentOffset.y)
    {
        [UIView animateWithDuration:.5 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{
               [self.navigationController.navigationBar setFrame:CGRectMake(0, -60, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)];
            [self.tabBarController.tabBar setFrame:CGRectMake(0, 480, 320, 50)];


        } completion:
         ^(BOOL finished) {

             [UIView animateWithDuration:.5 delay:2.0 options:UIViewAnimationOptionCurveEaseIn animations:^{

             } completion:^(BOOL finished) {

             }];

         }];



        NSLog(@"Scrolling Down");

    }

    self.lastContentOffset = scrollView.contentOffset.y;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tabBarController.tabBar setFrame:CGRectMake(0, 430, 320, 50)];
     [self.navigationController.navigationBar setFrame:CGRectMake(0, 20, self.navigationController.navigationBar.frame.size.width,self.navigationController.navigationBar.frame.size.height)];



    // Do any additional setup after loading the view.
}
于 2014-09-17T11:31:19.490 に答える