【问题标题】:UIViewControllerTransitioningDelegate dismiss animation with NSLayoutConstraint issueUIViewControllerTransitioningDelegate 关闭动画与 NSLayoutConstraint 问题
【发布时间】:2013-11-27 06:06:14
【问题描述】:

1) 我的任务是使用自定义动画呈现和关闭模态 UIViewController。

2) 自定义动画是改变alpha并移动一个子元素

3) 我创建了FadeInAnimationControllerFadeOutAnimationController 类来实现UIViewControllerAnimatedTransitioning,如下所示:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    // obtain state from the context
    CIToViewController *toViewController = (CIToViewController *)[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    // obtain the container view
    UIView *containerView = [transitionContext containerView];

    // set the intial state
    toViewController.view.alpha = 0.0f;
    toViewController.elementBottomPosition.constant -= 20.0f;
    [toViewController.view layoutIfNeeded];

    // add the view
    [containerView addSubview:toViewController.view];

    // animate
    [UIView animateWithDuration:[self transitionDuration:transitionContext]
                     animations:^{
                         toViewController.view.alpha = 1.0f;
                         toViewController.elementBottomPosition.constant += 20.0f;
                         [toViewController.view layoutIfNeeded];
                     }
                     completion:^(BOOL finished) {
                         [transitionContext completeTransition:YES];
                     }];
     }

4) elementBottomPosition 是 NSLayoutConstraint,适用于 Present 动画

5) 问题:

对于 Dismiss 动画 NSLayoutConstraint 不起作用,所以我不得不使用 Frame 做同样的事情并且它起作用了。 AutoLayout 和 iOS7 不是很好,但是因为我需要关闭这个视图,所以我不关心它的自动布局。

所以问题是为什么 NSLayoutConstraint 方法不起作用???我在animateTransition 中记录了约束:

NSLog(@"constraints %@", fromViewController.view.constraints);

它们仍然存在。

【问题讨论】:

  • toViewController.elementBottomPosition.constant += 20.0f [toViewController.view layoutIfNeeded]; - 这部分不起作用吗?
  • 是的,这部分不起作用,但仅适用于 Dismiss,Present 工作正常
  • 您能否更详细地解释一下它在哪些方面不起作用?
  • 没有反应,在elementBottomPosition.constant改变时,只是从屏幕上消失,不移动子视图元素
  • 你能看看消失的控制器上的viewWillDisappearviewDidDisappear是否在animations:块执行之前被调用了吗?

标签: ios animation autolayout


【解决方案1】:

不要在动画块中设置自动布局常量。

toViewController.elementBottomPosition.constant -= 20.0f;
[self.view layoutIfNeeded];
toViewController.elementBottomPosition.constant += 20.0f;

//Animation block here ^{
[self.view layoutIfNeeded];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2022-01-19
    相关资源
    最近更新 更多