仅限iOS 7.0中的UIPercentDriventInteractionController错误
我已经为UINavigationController实现了一个自定义转换,该转换在演示时将向上缩放演示视图,在关闭时将向下缩放正在关闭的视图控制器 我还实现了百分比驱动的交互 我有一个奇怪的bug,它只出现在iOS 7.0中。*(我的应用目标是7.0及以上版本)。仅在某些屏幕上(但可重复),如果我通过调用我的仅限iOS 7.0中的UIPercentDriventInteractionController错误,ios,ios7,uinavigationcontroller,uiviewanimationtransition,Ios,Ios7,Uinavigationcontroller,Uiviewanimationtransition,我已经为UINavigationController实现了一个自定义转换,该转换在演示时将向上缩放演示视图,在关闭时将向下缩放正在关闭的视图控制器 我还实现了百分比驱动的交互 我有一个奇怪的bug,它只出现在iOS 7.0中。*(我的应用目标是7.0及以上版本)。仅在某些屏幕上(但可重复),如果我通过调用我的UIPercentDrivenInteractiveTransition对象上的cancelInteractiveTransition取消百分比驱动的转换,顶视图控制器视图将显示,其属性设置
UIPercentDrivenInteractiveTransition
对象上的cancelInteractiveTransition
取消百分比驱动的转换,顶视图控制器视图将显示,其属性设置在UIView动画块中,该块由myUIViewControllerContextTransitioning
对象用于动画,而不是取消转换
因此,例如,如果我将Dismission动画设置为将dismissing view控制器缩放到50%,我将看到top view控制器缩放到50%,其后面有一个黑屏,而不是应该的全尺寸,因为我已取消转换
在iOS 7.1及以上版本中,以及在iOS 7.0中的一些屏幕上,一切都可以正常工作
以前有没有人见过类似的情况,或者知道问题出在哪里
下面是一些代码:
UINavigationControllerDelegate协议方法的实现:
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC
{
if (UINavigationControllerOperationNone)
{
return nil;
}
if (operation == UINavigationControllerOperationPush)
{
self.transitionAnimator.type = AnimationTypePresent;
return self.transitionAnimator;
}
if (operation == UINavigationControllerOperationPop)
{
self.transitionAnimator.type = AnimationTypeDismiss;
return self.transitionAnimator;
}
return nil;
}
- (id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController
*)navigationController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController
{
return self.interactionController;
}
取消转换的代码:
- (void)edgePanGestureBegan:(UIScreenEdgePanGestureRecognizer *)recognizer
{
if (!self.transitionCoordinator) {
self.interactionController = [UIPercentDrivenInteractiveTransition new];
[self popViewControllerAnimated:YES];
}
}
[self.interactionController cancelInteractiveTransition];
以及myUIViewControllerContextTransitioning
对象中的相关代码:
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIView *containerView = [transitionContext containerView];
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
if (self.type == AnimationTypePresent) {
...
} else if (self.type == AnimationTypeDismiss) {
[containerView insertSubview:toViewController.view belowSubview:fromViewController.view];
[UIView animateWithDuration:[self transitionDuration:transitionContext]
animations:^{
CATransform3D transform = CATransform3DMakeScale(0.01, 0.01, 1.0);
fromViewController.view.layer.transform = transform;
}
completion:^(BOOL finished) {
[transitionContext completeTransition:!transitionContext.transitionWasCancelled];
}];
}
}
-(void)animateTransfion:(id)transitionContext
{
UIView*containerView=[transitionContext containerView];
UIViewController*fromViewController=[transitionContext ViewControllerWorky:UITransitionContextFromViewControllerKey];
UIViewController*toViewController=[transitionContext ViewControllerWorky:UITransitionContextToViewControllerKey];
if(self.type==AnimationTypePresent){
...
}else if(self.type==animationtypedisease){
[containerView insertSubview:toViewController.view下的SubView:fromViewController.view];
[UIView animateWithDuration:[自转换持续时间:转换上下文]
动画:^{
CATTransformorM3D transform=CATTransformorM3DMakeScale(0.01,0.01,1.0);
fromViewController.view.layer.transform=转换;
}
完成:^(布尔完成){
[transitionContext completeTransition:!transitionContext.transitionWasCancelled];
}];
}
}