我在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
,它符合viewController转换说AtoBTransition
,我用这个ViewControllerTransition转换为vc(viewcontroller)A到vc B. when transitioning to vc B i want the status bar to slide up (hide with sliding animation)
但在这种情况下,它似乎没有那样做滑动动画。
问题:只是假设我没有在课程T
中执行UIStatusBar相关代码,并且没有在信息plist中添加值View controller-based status bar appearance
。转换T
可以根据需要完美运行。
我确定代码通过执行断点或日志记录来读取-preferredStatusBarUpdateAnimation
,但为什么它没有通过滑动隐藏状态栏动画?当我在模拟器中切换到慢动作。看来它不会做动画。
我的理论是它与转换动画上下文冲突,所以是否有可能在T
的实现中隐藏UIStatusBar作为其过渡方案的一部分?
是否可以与ViewControllerAnimationTransition一起进行UIStatusBar动画?
随意清除一些东西。提前谢谢.. :)
答案 0 :(得分:1)
我认为您无法直接使用iOS 7的视图控制器转换API执行此操作。
现在,我假设基于此API和状态栏API的钩子,状态栏本身就是动物,并且无法通过自定义转换进行动画制作。我认为是这种情况,因为当为您创建UIViewControllerContextTransitioning
transitionContext时,视图控制器A已经添加到它containerView
,并且因为您负责将视图控制器B添加到containerView
(因为您需要转换到它)所有视图控制器B的状态栏操作方法都会被触发。
但是,您可以在动画过渡期间为UIApplication
keyWindow
的{{1}}框架设置动画。所以在-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
}];
如果采用这种方法,您可能需要在视图控制器A中调整关键窗口的框架以降至状态栏下方,并根据需要设置为浅色/深色。然后反过来在视图控制器B中获得你想要的效果。它很讨厌,但它可以工作。