将UIPercentDrivenInteractiveTransition的效果限制在最上面的视图

有没有办法将UIPercentDrivenInteractiveTransition的效果限制在视图层次结构中最顶层的视图上?

具体来说:如这里和这里所解释的,交互转换将容器视图图层的speed为0,然后操作timeOffset以遍历转换。

例如,如果我在那个包含视图中有一个活动指示器,那么交互式转换也会通过活动指示器的自旋animation进行擦洗。 它停止旋转,似乎“前滚后移”与交互式转换。

有没有办法来设置speedtimeOffset的影响,并防止他们传播到任何或所有子视图?

到目前为止,我可以想到两种可能的方法:

  1. 创build一个“屏障”层:子类CALayer并覆盖setTimeOffset:防止或select性地阻止更改

  2. 子类或将UIPercentDrivenInteractiveTransitionreplace为遍历子视图层次结构并仅select性地点击某些视图

任何其他想法都会受到欢迎。

你应该告诉活动animation师停止animation,但在过渡期间保持可见。 这与苹果如何在应用程序中处理这一点是一致的。 例如,在邮件应用程序中,执行“刷新”以获取新邮件。 当指示器旋转时,使用交互式popup手势识别器大约一半。 请注意,活动指示器在交互式转换过程中停止。

你为什么不隐藏animation期间的活动指标? 那当然没有目的,有吗? 毕竟,这并不意味着“animation正在进行” – 用户不会感觉到这是一个animation,甚至是一个耗时的过渡,而是一个手指驱动的手势。 通过使用animation的完成处理程序,您可以在animation结束时再次轻松地显示它。

这个问题的答案是否定的。 根据苹果公司的说法, CALayer类采用CAMediaTiming “允许一个图层定义一个相对于其超级层的时间空间”。 换句话说,在子层中指定的任何timeOffsetbeginTime值都与上面的图层相加。 正如文档所述,“这种层次树时间空间的概念提供了一个可扩展的时间线,从根层开始,通过它的后代。

UIPercentDrivenInteractiveTransition通过[transitionContext containerView].layertimeOffset进行清理。 ( transitionContext是一个id<UIViewControllerContextTransitioning> )。

因此,它正在应用一个时间偏移量,然后由子层链中的所有子层自动采用。

没有“障碍”或“有select地击中某些层”的东西,因为这个时间传播是由Core Animation内部处理的。