使用UIViewControllerInteractiveTransitioning委托协议实现自定义UIViewController交互式过渡的正确方法

2020/12/13 05:11 · ios ·  · 0评论

我对一个简单的示例感兴趣,该示例如何创建一个NSObject子类,子类实现UIViewControllerInteractiveTransitioning协议以管理两个UIViewControllers之间的自定义交互式转换理想地是响应于轻扫手势。与现在随附的iOS7默认交互式滑动类似UINavigationController,但这是一个自定义/手动实现示例。

我已阅读文档:

并查看了其他地方的一些示例:

  • (我进行了设置,但更多的是关于UIViewController containment这些过渡的手动实施,而不是UIViewControllerInteractiveTransitioning

该文档相当清楚,但是没有参考示例代码。这些示例还有一些不足之处(关于如何将各个部分捆绑在一起的未回答的问题)。

所以我的问题是:

  1. 有人可以帮忙填写有关如何将手势(例如,滑动)绑定到实现UIViewControllerInteractiveTransitioning协议的对象的空白吗?
  2. 实现UIViewControllerInteractiveTransitioning协议的对象与实现UIViewControllerAnimatedTransitioning协议的对象之间有什么关系?似乎您必须同时触发交互转换...

提前致谢...

1)将手势绑定到UIViewControllerInteractiveTransitioning对象的最简单方法是使其成为的子类UIPercentDrivenInteractiveTransition然后在实现手势处理程序的地方,updateInteractiveTransition:在此处调用示例代码:

-(void)handlePinch:(UIPinchGestureRecognizer *)pinch {

    CGFloat scale = pinch.scale;
    switch (pinch.state) {
      case UIGestureRecognizerStateBegan: {
          _startScale = scale;
          self.interactive = YES;
          [self.navigationController popViewControllerAnimated:YES];
          break;
      }
      case UIGestureRecognizerStateChanged: {
          CGFloat percent = (1.0 - scale/_startScale);
          [self updateInteractiveTransition:(percent < 0.0) ? 0.0 : percent];
          break;
      }
      case UIGestureRecognizerStateEnded: {
          CGFloat percent = (1.0 - scale/_startScale);
          BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3);
          if (cancelled) [self cancelInteractiveTransition];
          else [self finishInteractiveTransition];
          break;
      }
      case UIGestureRecognizerStateCancelled: {
          CGFloat percent = (1.0 - scale/_startScale);
          BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3);
          if (cancelled) [self cancelInteractiveTransition];
          else [self finishInteractiveTransition];
          break;
      }
    }
}

这段代码来自https://www.captechconsulting.com/blogs/ios-7-tutorial-series-custom-navigation-transitions--更多

2)功能animateTransitionUIViewControllerAnimatedTransitioning用于执行交互式过渡。由于您先前对的调用,它会自动在“关键帧”中进行分区updateInteractiveTransition但是我想,如果您实现(而不使用子类的)startInteractiveTransition:方法,则您有责任管理完全过渡(不确定。.抱歉,但是我认为文档并不十分清楚)。UIViewControllerInteractiveTransitioningUIPercentDrivenInteractiveTransition

苹果确实确实提供了一个示例项目,说明如何实现此目的。话虽如此,我不认为这是最好/最清楚的例子,但它应该使您走上正确的道路。

他们也有一个WWDC视频,带您完成这个项目。

请注意,这是一个相当复杂的示例,但是如果您设法将其分解并理解了各个方面,那么您应该有能力在过渡方面或多或少地处理任何事情。

从本质上讲,该项目将问题分为两个帮助程序类:1)AssetTransitionController用视图控制器初始化并在其生命周期内存在的助手类;以及2)AssetTransitionDriver在其开始时创建并在存在期间存在的对象,过渡。

AssetTransitionController是相当简单的,它符合UIViewControllerAnimatedTransitioningUIViewControllerInteractiveTransitioning管理的生命周期AssetTransitionDriver

AssetTransitionDriver是一个简单的NSObject子类,但要复杂得多实际上结束了。它管理main UIViewPropertyAnimator,为过渡创建视图层次结构,并响应交互驱动程序(平移手势识别器)。AssetTransitionController当需要时,它还将其动画师出售给

它根本不使用UIPercentDrivenInteractiveTransition

本文地址:http://ios.askforanswer.com/shiyonguiviewcontrollerinteractivetransitioningweituoxieyishixianzidingyiuiviewcontrollerjiaohushibeng.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!