【问题标题】:When using UIViewControllerAnimatedTransitioning the toView buttons are unable to interact with使用 UIViewControllerAnimatedTransitioning 时,toView 按钮无法与之交互
【发布时间】:2017-02-01 18:23:40
【问题描述】:

我的自定义 UIViewControllerAnimatedTransitioning 类遇到了这个问题。当动画完成并呈现 toView 时,其中的元素(按钮等)无法接收交互。

自定义类代码是这样的:

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
    return 1.0;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext;
{
    UIViewController *fromViewController = (UIViewController *)[transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toViewController = (UIViewController *)[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    CGRect finalFrameForVC = [transitionContext finalFrameForViewController:toViewController];
    UIView *containerView = [transitionContext containerView];
    CGRect bounds = [[UIScreen mainScreen] bounds];
    toViewController.view.frame = CGRectMake(0, 0, bounds.size.width, 0);
    [containerView addSubview:toViewController.view];

    [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 usingSpringWithDamping:1.0 initialSpringVelocity:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
        fromViewController.view.alpha = 0.5;
        toViewController.view.frame = CGRectMake(0, 0, finalFrameForVC.size.width, finalFrameForVC.size.height);
    } completion:^(BOOL finished) {
        fromViewController.view.alpha = 0.0;
    }];
}

从视图来看,转换是这样调用的:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"showAction"]) {
        FiltersViewController *filterView = (FiltersViewController *)segue.destinationViewController;
        filterView.transitioningDelegate = self;
    }
}

-(id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source {
    self.filtersPresentAnimationController = [[FiltersPresentAnimationController alloc] init];
    return self.filtersPresentAnimationController;
}

知道我做错了什么吗?当我从 segue 中删除 segue 标识符时,它工作得很好。

【问题讨论】:

    标签: ios objective-c uiviewcontroller segue transition


    【解决方案1】:

    我只是忘了告诉transitionContext 转换完成了。

    所以在完成的动画块中缺少这个

    [transitionContext completeTransition:YES];
    

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2021-11-11
      相关资源
      最近更新 更多