2013-09-23 64 views
40

我感兴趣的是如何创建一个NSObject子类,实现了UIViewControllerInteractiveTransitioning协议来管理两个UIViewController s之间的自定义交互过渡简洁例如一个自定义的UIViewController互动转变。理想情况下,响应滑动手势。类似于现在与UINavigationController一起提供的iOS7默认交互式刷卡,但是这是一个自定义/手动实现示例。正确的方式来实现用UIViewControllerInteractiveTransitioning委托协议

我读过的文档:

而在其他地方的几个例子看:

  • one
  • two
  • three
  • four(我设置了,但它更多的是UIViewControllercontainment和手动实现这些转变,而不是UIViewControllerInteractiveTransitioning

该文档是相当明确的,但不参考示例代码。这些例子还有一些不足之处(关于各部分如何连接在一起的未解答的问题)。

所以我的问题是:

  1. 有人能帮助填写有关如何手势(例如轻扫)配合到实现UIViewControllerInteractiveTransitioning协议对象的空白?
  2. 执行UIViewControllerInteractiveTransitioning协议的对象与实现UIViewControllerAnimatedTransitioning协议的对象之间有什么关系?好像你必须同时触发互动的转变......提前

谢谢...

+0

您的示例代码已关闭/无法找到。 –

+0

非常感谢您的支持,对不起,我几天前就把它拿下来 –

+0

回购支持,或者永不停机,不记得发生了什么事情,也许我已经改变了回购的名字或者其他东西。无论如何它现在在那里。 –

回答

12

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--more

2)功能的UIViewControllerAnimatedTransitioninganimateTransition用于执行交互式过渡。由于您之前致电updateInteractiveTransition,它会自动在“关键帧”中进行分区。但我想,如果你实现你的UIViewControllerInteractiveTransitioningstartInteractiveTransition:方法(因此不使用UIPercentDrivenInteractiveTransition子类),那么你是负责管理完全转换(不知道这一点..抱歉,但在我看来,文档是不是真的清楚)。

+1

如果你实现startInteractiveTransition:方法,animateTransition永远不会被调用(调试它几个小时,感谢这个想法) –