1) У меня есть задача представить и отклонить модальный UIViewController с пользовательской анимацией.
2) Пользовательская анимация - это изменение альфы и перемещение одного дочернего элемента
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);
И они все еще присутствуют.