自定义转换后无法识别触摸

时间:2014-03-10 12:24:31

标签: ios ios7 custom-transition

我在iPad上遇到自定义转换问题。我创建了一个自定义过渡,正确动画并且似乎有效(即发生过渡)。但是,当我到达目标视图控制器时(执行isLoggedIn块之后),目标视图控制器没有响应(它不响应触摸事件)。我觉得它与[container insertSubview:toViewController.view belowSubview:fromViewController.view];的调用有关,因为如果我调用[container insertSubview:toViewController.view aboveSubview:fromViewController.view];触摸按预期工作(但你看不到动画,因为它发生在源视图控制器上)。

知道触摸事件未被识别的原因吗?

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *container = [transitionContext containerView];

//Prepare the view
if (self.isLoggedIn) {
    //Insert the main view under the login view
    CGRect frame = CGRectMake(0, 0, toViewController.view.frame.size.height,
                              toViewController.view.frame.size.width);
    toViewController.view.frame = frame;
    [container insertSubview:toViewController.view belowSubview:fromViewController.view];
} else {
    CGRect frame = CGRectMake(0, 0, toViewController.view.frame.size.height,
                              toViewController.view.frame.size.width);
    toViewController.view.frame = frame;
    if([toViewController respondsToSelector:@selector(openWalls)]) {
        [(DJVLoginViewController*)toViewController openWalls];
    }
    if([toViewController respondsToSelector:@selector(toggleLoginViewsAlpha:)]) {
        [(DJVLoginViewController*)toViewController toggleLoginViewsAlpha:0];
    }
    //Insert the login view above the main view
    [container insertSubview:toViewController.view aboveSubview:fromViewController.view];
}

//Make animations

[UIView animateWithDuration:[self transitionDuration:transitionContext]
                 animations:^{
                     if (self.isLoggedIn) {
                         //Perform animation
                     } else {
                         //Perform animation
                     }
                 } completion:^(BOOL finished) {
                     [transitionContext completeTransition:YES];
                 }];
}

1 个答案:

答案 0 :(得分:1)

尝试从superview中删除fromView:

[UIView animateWithDuration:[self transitionDuration:transitionContext]
                 animations:^{
                     if (self.isLoggedIn) {
                         //Perform animation
                     } else {
                         //Perform animation
                     }
                 } completion:^(BOOL finished) {
                     [fromViewController.view removeFromSuperview];
                     [transitionContext completeTransition:YES];
                 }];
}