无论如何在两个视图之间使用CATransition时删除淡入淡出?

时间:2016-01-27 01:26:26

标签: ios swift animation uinavigationcontroller

我要做的是使用CATransitions从左侧推送自定义动画。在我的正常代码中,我想使用0.3的持续时间,但在下面的示例中,我使用的是6.0,因此我可以在转换过程中看到实际问题。

很明显,在转换到新视图时会出现淡入淡出。新视图从背景颜色渐变到实际视图,而从屏幕滑落的视图从实际视图渐变为背景颜色。在进行推送动画转换时,它会产生一些奇怪的外观。

以下是我用于转换的代码。 settingsController是我试图动画的控制器。

    let transition = CATransition()
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.duration = 6.0
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromLeft

    self.navigationController?.view.layer.addAnimation(transition, forKey: nil)
    UIView.transitionFromView(self.view, toView: settingsViewController.view, duration: 0, options: UIViewAnimationOptions.TransitionNone, completion: nil)
    self.navigationController?.pushViewController(settingsViewController, animated: false)

正如所提到的,实际的滑动动画可以按照我想要的方式工作,但是会发生这种淡化,只是让它看起来不正确。我一直在搜索谷歌和stackoverflow并没有看到一个解决方案发布,所以我想知道是否有人知道如何摆脱这种淡化,或者即使有一个解决方案“模拟”这种行为所以用户体验看起来就像我想要的那样。

我尝试使两个视图的背景颜色相同,但看起来仍然不正确。

1 个答案:

答案 0 :(得分:3)

使用滑动CAT转换的常用方法是为转换视图/图层提供剪切到边界的超级视图(或掩盖边界的超级图层)。这样,滑动视图/图层在superview的界限之外是不可见的,我们永远不会看到淡入淡出。