我在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
的,但是为什么它没有通过滑动来隐藏状态栏动画呢?当我在模拟器中切换到慢动作时。看来它不做动画。 随时清除一些东西。谢谢你.. :)
最佳答案
我认为您无法直接使用iOS 7的 View Controller 转换API来执行此操作。
现在,我假设基于此API和状态栏API的钩子(Hook),状态栏本身就是动物,无法用于自定义过渡的动画。我认为是这种情况,因为在为您创建UIViewControllerContextTransitioning
transitionContext时, View Controller A已经添加到了它的containerView
中,并且因为您负责将 View Controller B添加到containerView
中(因为您需要过渡到它),所有 View 这样做时,将触发 Controller B的状态栏操纵方法。
但是,您可以在动画过渡期间动画化UIApplication
的keyWindow
的帧,因此请在实现-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/