交互式转换类似于滚动视图

时间:2015-06-20 07:58:42

标签: ios interactive transitions

我已经使用手势识别器和passenger_ruby在两个视图控制器之间实现了交互式过渡。我正在进行自定义滑动过渡。

我想改进2件事以便与滚动视图动画类似:

  1. 响应性。当你超快速和短暂平移时,下一个vc甚至没有显示,加上一个bug(UIPercentDrivenInteractiveTransition没有被调用,但这是另一个故事) 有没有办法预加载下一个视图控制器,让它作为子视图控制器可能?好像我在viewDidLoad中做了太多工作。

  2. 在我的实现中,当手势识别器结束时,我调用animationEnded。这可以正常工作,但是如果在完成此转换之前启动新的平移手势,则UI只会跳转而不是平滑滚动。我可能会在延迟后致电finishInteractiveTransition,并在同一时间手动调用finishInteractiveTransition吗?

  3. 可能我可以使用其他API集来进行交互式动画(但滚动视图不是一个选项)?

    仅供参考:这是交互式滑动期间的视图层次结构,我的手势附加到导航视图:

    during interactive swipe

1 个答案:

答案 0 :(得分:2)

尝试继承UIPercentDrivenInteractiveTransition并实现这些方法。这应该有助于缓和混蛋:

- (void)startInteractiveTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    [super startInteractiveTransition:transitionContext];
    self.layer = transitionContext.containerView.layer;
}

- (void)finishInteractiveTransition
{
    [super finishInteractiveTransition];
    self.layer.speed = 1;
    self.layer.beginTime = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - self.layer.timeOffset;
}

- (void)cancelInteractiveTransition
{
    [super cancelInteractiveTransition];
    self.layer.speed = -1;
    self.layer.beginTime = CACurrentMediaTime();
}