【发布时间】:2013-11-27 06:06:14
【问题描述】:
1) 我的任务是使用自定义动画呈现和关闭模态 UIViewController。
2) 自定义动画是改变alpha并移动一个子元素
3) 我创建了FadeInAnimationController 和FadeOutAnimationController 类来实现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改变时,只是从屏幕上消失,不移动子视图元素 -
你能看看消失的控制器上的
viewWillDisappear和viewDidDisappear是否在animations:块执行之前被调用了吗?
标签: ios animation autolayout