【问题标题】:Interactive transition similar to scroll view类似于滚动视图的交互式过渡
【发布时间】:2015-06-20 07:58:41
【问题描述】:

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

我想改进 2 点,以便拥有类似于滚动视图的动画:

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

  2. 在我的实现中,当手势识别器结束时,我调用finishInteractiveTransition。这可以正常工作,但是如果您在此转换完成之前开始新的平移手势,则 UI 只会跳转而不是平滑滚动。那么我是否应该在延迟后拨打finishInteractiveTransition,同时手动拨打updateInteractiveTransition

我是否可以使用其他 API 集来制作交互式动画(但不能选择滚动视图)?

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

【问题讨论】:

  • 听起来很棒的想法
  • 你的问题解决了吗

标签: ios interactive transitions


【解决方案1】:

尝试继承 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();
}

【讨论】:

  • 什么是 self.layer 考虑到我的视图层次结构(UIPercentDrivenInteractiveTransition 没有它)?如果我将一些代码提取到 github 上的工作项目中可能会更好吗?
  • self.layer 在摘录中分配。
  • 嗨,@rounak 你能解释一下 self.layer 的例子吗?有意思!
  • @saiday 是 containerView 的层
猜你喜欢
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 2016-06-01
  • 2019-04-01
  • 2023-03-10
相关资源
最近更新 更多