我有一个UITabBarController,显示4个标签。
我想在用户滑动屏幕切换标签时添加动画UIViewController转换。 ( - (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController方法只适用于select tab直接)。过渡将是轻松的风格。
我尝试了以下代码,但没有工作。只有UIViewController移动,UIViewController根本没有显示。(我打印了所有UIViewControllers的帧数据,所有这4个UIViewControllers都是{0,0},{320,480})
// Get views. controllerIndex is passed.
UIViewController *fromVC = [_tabBarController.viewControllers objectAtIndex:startIndex];
UIViewController *toVC = [_tabBarController.viewControllers objectAtIndex:to];
UIView *fromView = fromVC.view;
UIView *toView = toVC.view;
MWLog(@"from view is %@",fromView);
int direct = startIndex - to;
// calculate move direction.
if (direct < 0) {
CGRect outFrame = fromView.frame;
outFrame.origin.x = -320; // expect fromView will move to {-320,0}, out of screen.
MWLog(@"fromView's frame is %@", NSStringFromCGRect(fromView.frame));
CGRect inFrame = toView.frame;
inFrame.origin.x = 0;
MWLog(@"toView's frame is %@", NSStringFromCGRect(toView.frame));
[UIView beginAnimations:@"moveView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5f];
toView.frame = inFrame;
fromView.frame = outFrame;
[UIView commitAnimations];
}else
{
// reverse moving. ignored....
}
你能告诉我什么是错的以及如何正确地做到这一点?提前谢谢!
答案 0 :(得分:0)
最后我找到了解决方案。
使用CATransition动画,输入push,根据方向左键或右键(通过计算tabbarcontroller的selectedIndex属性)。然后,将此动画添加到tabbarcontroller的容器视图中。
可以通过枚举[tabbarcontroller subviews]数组中的所有UIView来获取此视图的引用。实际上,如果没有自定义UIView,tabbarcontroller包含2个子视图,一个是UITabBar,另一个是容器视图,UITransitionView。在此视图上添加动画,您可以为不同的内容屏幕启用页面过渡动画。