Używam protokołu iOS 7 UIviewControllerAnimatedTransitioning
do przedstawienia modalnego modelu ViewController
z niestandardową animacją. Animacja działa poprawnie, ale chcę, aby nowo przedstawiony ViewController
miał inny styl paska stanu niż prezentujący VC.Jak zaktualizować styl paska stanu w ramach niestandardowego przejścia
Co ja widzę, że -(UIStatusBarStyle)preferredStatusBarStyle
jest wywoływana na prezentowaniu ViewController
(kilka razy w rzeczywistości) i nigdy na nowo przedstawiony ViewController
. Jeśli usuniemy animację niestandardową, wszystko z paskiem stanu działa tak, jak się spodziewam.
Czy jest coś szczególnego, co należy zrobić w mojej funkcji animateTransition, aby zaktualizować kontroler widoku głównego lub coś podobnego? Próbowałem ręcznie ustawić statusBar z [UIApplication sharedApplication] setStatusBarStyle
, ale to nie działa (myślę, ponieważ używam stylu paska stanu na podstawie kontrolera ios 7).
To jest mój kod 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];
}];
}
Wszelkie wskazówki mile widziane!
Wiedziałem, że to coś takiego, po prostu nie mogłem znaleźć to ustawienie. Dzięki wielkie! –