使用自定义容器控制器实现自定义转换

时间:2014-05-19 02:44:32

标签: objective-c ios7 uikit-transitions

我正在尝试在我的iPhone应用程序中创建自定义容器控制器。我希望这个容器实现自定义转换,就像iOS 7中TabBarControllers和NavigationControllers的默认行为一样。我已经成功地为我的转换添加了自定义动画,但是在添加交互逻辑时遇到了麻烦。

作为转换过程的一部分,我必须创建一个TransitionContext。这通常是由系统创建的,但由于我使用的是自定义容器控制器,因此我创建了自己的类,该类符合UIViewControllerContextTransitioningProtocol。当触发与转换绑定的手势识别器时,我尝试通过调用:

开始转换
[self.horizontalSwipeInteractionController startInteractiveTransition:transitionContext];

其中self.horizo​​ntalSwipeInteractionController继承自UIPercentDriveInteractiveTranstion。不幸的是,此时我收到以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PrivateTransitionContext _animator]: unrecognized selector sent to instance 0x14654a80

我现在不明白该怎么做。该文档没有提供有关如何使用自定义容器控制器实现自定义转换的示例。

1 个答案:

答案 0 :(得分:1)

不幸的是,UIPercentDriveInteractiveTranstion使用私有API。

AlekÅström在他的iOS Nomad blog上写到这一点,他在那里创建了一个交互式自定义容器控制器(重点添加):

  

...我们可以看到UIPercentDrivenInteractiveTransition在我们的上下文中查找动画师,调用一个未记录的方法。方便的是,所有Apple制作的转换上下文都实现了这种方法,这就是百分比驱动的转换可以触发动画的方式。不幸的是,这意味着我们不能将该类用于我们自己的自定义容器视图控制器。

他建议使用AWPercentDrivenInteractiveTransition代替。