我对如何创建实现NSObject
协议的UIViewControllerInteractiveTransitioning
子类的简明示例感兴趣,以管理两个UIViewController
之间的自定义交互式转换。理想情况下,响应轻扫手势。类似于现在附带UINavigationController
的iOS7默认交互式滑动,但这是一个自定义/手动实现示例。
我已阅读文档:
在其他地方看了几个例子:
UIViewController
containment
并且手动实现这些转换而不是UIViewControllerInteractiveTransitioning
文档相当清楚但不引用示例代码。这些例子还有一些不足之处(关于各个部分如何捆绑在一起的未解答的问题)。
所以我的问题是:
UIViewControllerInteractiveTransitioning
协议的对象的空白处吗?提前致谢...
答案 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) animateTransition
的函数UIViewControllerAnimatedTransitioning
用于执行交互式转换。您之前致电updateInteractiveTransition
,它会自动在“关键帧”中进行分区。但我想如果你实现startInteractiveTransition:
UIViewControllerInteractiveTransitioning
方法(所以没有使用UIPercentDrivenInteractiveTransition
子类),那么你有责任管理完全过渡(不确定那个......对不起,但是我认为文件不是很清楚)。
答案 1 :(得分:6)
Apple确实确实提供了example project,以说明如何实现此目的。话虽如此,我认为这不是最好/最清楚的例子,但是它应该可以使您走上正确的道路。
他们也有a WWDC video可以带您完成这个项目。
请注意,这是一个相当复杂的示例,但是如果您确实设法将其分解并理解了各个方面,那么您应该有能力在过渡方面或多或少地处理任何事情。
从本质上讲,该项目将问题分为两个帮助程序类:1)用视图控制器初始化并存在的<div id="test"></div>
对象,以及2)一个AssetTransitionController
对象是在过渡开始时创建的,并且在过渡期间一直存在。
AssetTransitionDriver
非常简单,它符合管理AssetTransitionController
生命周期的UIViewControllerAnimatedTransitioning
和UIViewControllerInteractiveTransitioning
。
AssetTransitionDriver
是一个简单的AssetTransitionDriver
子类,但实际上要复杂得多。它管理主要的NSObject
,为过渡创建视图层次结构,并响应交互驱动程序(平移手势识别器)。当请求时,它还将其动画制作者出售给UIViewPropertyAnimator
。
它根本不使用AssetTransitionController
。