Я использую протокол iOS 7 UIviewControllerAnimatedTransitioning
, чтобы представить модальный ViewController
с помощью специальной анимации. Анимация работает правильно, однако я хочу, чтобы вновь представленный ViewController
имел другой стиль строки состояния, чем представляющий VC.
То, что я вижу, - это то, что -(UIStatusBarStyle)preferredStatusBarStyle
вызывается на PRESENTING ViewController
(несколько раз на самом деле) и никогда не будет на вновь представленном ViewController
. Если я удалю пользовательскую анимацию, все со статусной строкой будет работать так, как я ожидал.
Есть ли что-то особенное, что мне нужно сделать в моей функции animateTransition для обновления контроллера корневого представления или чего-то еще? Я попытался вручную установить statusBar с помощью [UIApplication sharedApplication] setStatusBarStyle
, но он не работает (я думаю, потому что я использую стилирование строки состояния на основе контроллера ios 7).
Это мой код для animateTransition:
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UICollectionViewCell *activeCell;
if ([self.collectionView.visibleCells containsObject:self.cellForActiveIdeaVC]) {
activeCell = self.cellForActiveIdeaVC;
}
UIView *container = transitionContext.containerView;
UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *fromView = fromVC.view;
UIView *toView = toVC.view;
CGRect beginFrame;
if (activeCell) {
beginFrame = [container convertRect:activeCell.bounds fromView:activeCell];
} else {
beginFrame = CGRectMake(container.width / 2, container.height / 2, 0, 0);
}
CGRect endFrame = [transitionContext initialFrameForViewController:fromVC];
UIView *move = nil;
if (toVC.isBeingPresented) {
toView.frame = endFrame;
move = [toView snapshotViewAfterScreenUpdates:YES];
move.frame = beginFrame;
} else {
if (activeCell) {
move = [activeCell snapshotViewAfterScreenUpdates:YES];
} else {
move = [fromView snapshotViewAfterScreenUpdates:YES];
}
move.frame = fromView.frame;
[fromView removeFromSuperview];
}
[container addSubview:move];
[UIView animateWithDuration:.5
delay:0
usingSpringWithDamping:700
initialSpringVelocity:15
options:0
animations:^{
move.frame = toVC.isBeingPresented ? endFrame : beginFrame;
}
completion:^(BOOL finished) {
[move removeFromSuperview];
if (toVC.isBeingPresented) {
toView.frame = endFrame;
[container addSubview:toView];
} else {
if (self.cellForActiveIdeaVC) {
self.cellForActiveIdeaVC = nil;
}
}
[transitionContext completeTransition:YES];
}];
}
Любые указатели очень ценятся!