Sto utilizzando il protocollo iOS 7 UIviewControllerAnimatedTransitioning
per presentare un modale ViewController
con un'animazione personalizzata. L'animazione funziona correttamente, tuttavia, desidero che la nuova versione ViewController
abbia uno stile di barra di stato diverso rispetto al VC di presentazione.Come aggiornare lo stile StatusBar come parte di una transizione personalizzata
Quello che sto vedendo è che -(UIStatusBarStyle)preferredStatusBarStyle
viene chiamato sulle PRESENTANO ViewController
(più volte in realtà) e mai sul recente presentato ViewController
. Se rimuovo l'animazione personalizzata, tutto con la barra di stato funziona come mi aspetterei.
C'è qualcosa di speciale che devo fare nella mia funzione animateTransition per aggiornare il controller di visualizzazione radice o qualcosa del genere? Ho provato a impostare manualmente lo statusBar con [UIApplication sharedApplication] setStatusBarStyle
ma non funziona (penso perché sto usando lo stile della barra di stato basato su controller ios 7).
Questo è il mio codice per 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];
}];
}
Tutti gli indicatori molto apprezzati!
Sapevo che era qualcosa del genere, non riuscivo a trovare quell'impostazione. Grazie mille! –