的UIViewControllerAnimatedTransit

的UIViewControllerAnimatedTransit

我在ViewController A中实现了该方法

- (BOOL)prefersStatusBarHidden {
  return NO;
}

我在ViewController B中实现了该方法
- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
  return UIStatusBarAnimationSlide; // when doing hiding animation i want it to slide up
}

我实现了一个符合T的类AtoBTransition,即when transitioning to vc B i want the status bar to slide up (hide with sliding animation),我使用了此ViewControllerTransition从vc(viewcontroller)A过渡到VCB。T,但在这种情况下,它似乎不做滑动动画。

问题:假设我没有在View controller-based status bar appearance类中执行与UIStatusBar相关的代码,并且未在info plist中添加值T。过渡-preferredStatusBarUpdateAnimation可以根据需要完美运行。
  • 我确定代码是通过执行断点或记录来读取T的,但是为什么它没有通过滑动来隐藏状态栏动画呢?当我在模拟器中切换到慢动作时。看来它不做动画。
  • 我的理论是,它与过渡动画上下文冲突,因此是否有可能在ojit_code的实现中隐藏UIStatusBar的动画作为过渡方案的一部分?
  • 是否可以与ViewControllerAnimationTransition一起做UIStatusBar动画?

  • 随时清除一些东西。谢谢你.. :)

    最佳答案

    我认为您无法直接使用iOS 7的 View Controller 转换API来执行此操作。

    现在,我假设基于此API和状态栏API的钩子(Hook),状态栏本身就是动物,无法用于自定义过渡的动画。我认为是这种情况,因为在为您创建UIViewControllerContextTransitioning transitionContext时, View Controller A已经添加到了它的containerView中,并且因为您负责将 View Controller B添加到containerView中(因为您需要过渡到它),所有 View 这样做时,将触发 Controller B的状态栏操纵方法。

    但是,您可以在动画过渡期间动画化UIApplicationkeyWindow的帧,因此请在实现-animateTransition:的类的UIViewControllerAnimatedTransitioning方法中。

    [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    
        [UIApplication sharedApplication].keyWindow.frame = CGRectMake(0, 0, 320, 568);  // move frame up
    
    } completion:^(BOOL finished) {
    
        // assuming
        [UIApplication sharedApplication].keyWindow.frame = CGRectMake(0, 20, 320, 568); //move frame down
    }];
    

    如果采用这种方法,则可能需要调整 View Controller A中关键窗口的框架,使其位于状态栏下方,并根据需要设置为亮/暗样式。然后执行相反的操作,以在 View Controller B中获得所需的效果。它很讨厌,但是可以工作。

    关于ios - 带有UIStatusBarAnimation的UIViewControllerAnimatedTransitioning,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24614215/

    10-11 00:46