Ios 按下UITabBar按钮后,但在视图转换前后执行方法

Ios 按下UITabBar按钮后,但在视图转换前后执行方法,ios,uiview,uitabbarcontroller,Ios,Uiview,Uitabbarcontroller,我需要在按下tabBar按钮之后,但在视图转换之前运行一个方法。并在视图转换后运行第二个方法。目标是添加退出/进入效果 我试着用 ViewDidAppear 及 但它不起作用 而且 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 似乎不允许在切换视图之前/之后执行动画 有人知道怎么做吗 提前

我需要在按下tabBar按钮之后,但在视图转换之前运行一个方法。并在视图转换后运行第二个方法。目标是添加退出/进入效果

我试着用

ViewDidAppear 

但它不起作用

而且

- (void)tabBarController:(UITabBarController *)tabBarController 
 didSelectViewController:(UIViewController *)viewController
似乎不允许在切换视图之前/之后执行动画

有人知道怎么做吗


提前谢谢。

试试这个,看看是否有效。对于before动画,实现tabBarController:shouldSelectViewController:,并放置 你的动画代码在那里。在动画的“完成”块中返回“是”,以便切换到新选项卡将被延迟,直到动画结束。之后的动画应该放在您要移动到的选项卡的ViewDidAspect方法中

编辑后:

这比我上面的答案要复杂一点,所以必须通过调用tabBarController:shouldSelectViewController:中的一个方法来完成,该方法执行动画,然后选择要移动到的视图控制器——通过在代码中进行选择,委托方法将不会被再次调用。下面是一个示例,我只是在动画块中移动一个视图

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    [self completeTabChangeToController:viewController];
    return NO;
}


-(void)completeTabChangeToController:(UIViewController *) controller {
    self.bottomCon.constant = 50;
    [UIView animateWithDuration:.5 animations:^{
        [self.view layoutIfNeeded];
    } completion:^(BOOL finished) {
        [self.tabBarController setSelectedViewController:controller];
    }];
}

ViewDidApper仅在视图第一次显示时执行,即在按下相应的选项卡栏按钮后显示视图的次数,该方法不被调用。此外,我在完成块中得到一个编译器错误,返回“是”。更正-ViewDidApper部分适用于我要移动到的视图。@Joao,我最初回答时不在我的编码计算机上,所以现在我已经测试了如何做,我编辑了我的答案。
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    [self completeTabChangeToController:viewController];
    return NO;
}


-(void)completeTabChangeToController:(UIViewController *) controller {
    self.bottomCon.constant = 50;
    [UIView animateWithDuration:.5 animations:^{
        [self.view layoutIfNeeded];
    } completion:^(BOOL finished) {
        [self.tabBarController setSelectedViewController:controller];
    }];
}