我有这样的视图层次结构。我的Window rootViewController是TabBarController,其中有一些很好的背景图像加载到ImageView中。
现在,我希望在一个TabBar下使用NavigationController。此NavigationController堆栈中的每个View Controller都必须具有透明视图(因此TabBarController背面的图像是可见的)所以我在NavigationController堆栈view.backgroundColor中的所有视图控制器上设置为UIColor.clearColor()。
背景图片可见。但是这种显示ViewController会破坏NavigationController中的PUSH / POP转换。
问题是当从vc1推到vc2时,vc1在转换过程中向左移动了一点,突然消失了。
当vc2不透明时,vc1的动画不可见,因为它在vc2下并且它在视觉上可以正常但是当vc2是透明的(在这种情况下必须是)时,vc1的动画是可见的。如何更改此行为,以便我可以在vc1上使用流畅的动画。我想vc1移动它移动的方式,但它也应该流畅地消失。
第二个问题:
我尝试通过委托方法
向我的NavigationController添加自定义转换func navigationController(
navigationController: UINavigationController,
animationControllerForOperation operation: UINavigationControllerOperation,
fromViewController fromVC: UIViewController,
toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
我实现了简单的转换,但是当我执行PUSH时:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
performSegueWithIdentifier(AbstractContactController.showContactProfileSegue, sender: nil)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
我有以下错误,点击表格单元格后应用程序崩溃了。:
warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.
只有在我使用导航控制器的实现时才会出现错误,这里是它的实现:
class MyNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
}
extension MyNavigationController: UINavigationControllerDelegate {
func navigationController(
navigationController: UINavigationController,
animationControllerForOperation operation: UINavigationControllerOperation,
fromViewController fromVC: UIViewController,
toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
}
extension MyNavigationController: UIViewControllerAnimatedTransitioning {
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 1.0
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
transitionContext.completeTransition(true)
}
}