使用自定义动画推送UITableViewController始终为UINavigationItem标题设置动画

Seb*_*arr 8 animation objective-c uinavigationcontroller uinavigationitem ios

我使用以下代码作为扩展UINavigationController来推送具有自定义动画的视图控制器:

@implementation UINavigationController (PushAnimation)

- (void)pushViewController:(UIViewController*)controller  withTransition:(UIViewAnimationTransition)transition
{
    [UIView beginAnimations:nil context:NULL];
    [self pushViewController:controller animated:NO];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationBeginsFromCurrentState:YES];        
    [UIView setAnimationTransition:transition forView:self.view cache:YES];
    [UIView commitAnimations];
}

@end
Run Code Online (Sandbox Code Playgroud)

启用缓存后,我在推送时会出现奇怪的动画行为UITableViewController.自定义动画完成后,将显示推送视图的标题.通过过渡风格UIViewAnimationTransitionNone,标题本身就变得清晰.它从屏幕的左上角移动到屏幕的中心UINavigationBar.

禁用缓存后,由于速度不同,此动画不可见,但帧速率显着下降.

如何防止标题动画?

Seb*_*arr 0

只是快速更新我的修复结果。无法覆盖 的默认行为UINavigationBar,因为 iOS 使用私有 API 来实现动画。因此,我最终UINavigationBar使用以下代码删除了 及其各个子视图上的所有动画:

[self.navigationBar.layer removeAllAnimations];
for (UIView *view in self.navigationBar.subviews) {
    [view.layer removeAllAnimations];
    for (UIView *sub in view.subviews) {
        [sub.layer removeAllAnimations];
    }
}
Run Code Online (Sandbox Code Playgroud)

重要的是,这是在 之后调用的[self pushViewController:controller animated:NO];