When calling -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]
, I get a weird navigation bar animation. I've definitely seen that kind of thing before, where a view is added to the screen during an animation, and because it doesn't have a frame to begin with animates from 0,0. But I'm not sure what could be causing it in the navigation bar.
Code used to transition the view controllers:
- (void)setCurrentViewController:(UIViewController<TCSearchResultsViewController> *)currentViewController animated:(BOOL)animated
{
[self.searchBar resignFirstResponder];
if (_currentViewController != currentViewController) {
if (_transitioning) {
__weak __typeof(self)self_weak = self;
_afterTransition = ^{
[self_weak setCurrentViewController:currentViewController animated:animated];
};
return;
}
UIViewController<TCSearchResultsViewController> *oldViewController = _currentViewController;
_currentViewController = currentViewController;
[oldViewController willMoveToParentViewController:nil];
[self addChildViewController:_currentViewController];
_currentViewController.view.frame = self.resultsViewContainer.bounds;
_currentViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
_currentViewController.groups = _searchManager.allObjects;
_currentViewController.location = _location;
if (oldViewController != nil) {
_transitioning = YES;
[self transitionFromViewController:oldViewController
toViewController:_currentViewController
duration:(animated ? 0.5 : 0.0)
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:nil completion:^(BOOL finished) {
[_currentViewController didMoveToParentViewController:self];
// this will make sure UITableViewController catches up to the keyboard position
UIView *firstResponder = self.view.window.firstResponder;
if (firstResponder != nil) {
[firstResponder resignFirstResponder];
[firstResponder becomeFirstResponder];
}
_transitioning = NO;
if (_afterTransition != nil) {
_afterTransition();
_afterTransition = nil;
}
}];
} else {
[self addViewController:self.listViewController toView:self.resultsViewContainer];
_transitioning = NO;
if (_afterTransition != nil) {
_afterTransition();
_afterTransition = nil;
}
}
}
}
Here is a video of it happening: http://f.cl.ly/items/2s0H0n3g3i0C1K470V2V/Nav%20Bar%20Animation.mov
The view controller that is being transitioned is just below the double lines in the video.