【发布时间】:2014-11-17 20:27:44
【问题描述】:
我已经创建了自己的各种 tabbarcontroller,但在动画方面遇到了问题。当我在选项卡单击时为视图设置动画时,导航栏会完全变黑(应该是红色),然后在动画完成后闪烁回红色。我的设置和代码如下。
(在 swift 或 Objective-c 中的答案都很有帮助,因为翻译很简单)
提前致谢!
红色:导航栏
蓝色:导航显示视图
灰色:标签栏
酒红色:标签栏显示视图(这是正在转换/动画的部分)
我使用以下代码在我的视图之间转换/动画。
//Handles selection of a tab bar item
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem!) {
//Get controller for transition
var selectedController = self.controllers[item.tag];
//Only transition for new view
if(self.childViewControllers[0] as UIViewController != selectedController!){
//Prepare for controller transition
selectedController!.viewWillAppear(false)
self.currViewController?.viewWillDisappear(false)
self.currViewController?.willMoveToParentViewController(nil)
//Set new controller with animation
selectedController!.view.frame = self.displayView.frame
if(transitionAnimated){
UIView.transitionFromView(self.displayView, toView: selectedController!.view, duration: self.animationDuration, options: self.animationOptions, completion: {finished in
self.setNewController(selectedController!)
self.animationCompletion(finished)
})
}
else{
self.displayView.removeFromSuperview()
self.view.addSubview(selectedController!.view)
setNewController(selectedController!);
}
}
else{
if(self.childViewControllers[0].isKindOfClass(UINavigationController)){
(self.childViewControllers[0] as UINavigationController).popToRootViewControllerAnimated(true)
}
}
}
【问题讨论】:
-
您是否考虑过使用
UIViewControllerAnimatedTransitioning自定义标签栏控制器动画? developer.apple.com/library/ios/documentation/uikit/reference/…。没关系,我刚刚意识到您制作了自己的标签栏控制器,所以上面的内容可能对您没有帮助。 -
我打赌你没有在正确的时间发送所有正确的转换消息。为什么不只是use
transitionFromViewController:toViewController:duration:options:animations:completion:? -
@AaronBrager 当我使用 transitionFromViewController 时,视图不是我的 displayView 的子视图。我的 displayView 缩小和增长取决于选项卡栏是隐藏还是显示(有一些实用方法可以为选项卡栏的框架和 displayView 的框架设置动画)。使用 transitionFromViewController 时生成的视图控制器在显示时覆盖标签栏。如果您可以为此提供解决方案,那么我就是游戏。
标签: objective-c swift uinavigationcontroller uitabbar uiviewanimation