推动透明视图控制器转换问题

时间:2016-05-16 12:16:36

标签: ios uiviewcontroller uinavigationcontroller uiviewanimationtransition catransition

我有这样的视图层次结构。我的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)
    }
}

0 个答案:

没有答案