我需要在另一個視圖控制器的中心呈現視圖控制器與一些動畫效果。我希望轉換是可重用的,所以我定義了一個類來實現UIViewControllerAnimatedTransitioning協議。我只是簡單地添加約束到子視圖將其定位爲中心,改變容器的顏色,並執行動畫:iOS 7呈現視圖控制器與自定義轉換沒有動畫
-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
if (self.status == TransitioningStatusPresent) {
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
UIView *containerView = [transitionContext containerView];
containerView.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.25f];
[containerView addSubview:toView];
toView.translatesAutoresizingMaskIntoConstraints = NO;
id c1 = [NSLayoutConstraint constraintWithItem:toView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeCenterX
multiplier:1.0f constant:0.0f];
id c2 = [NSLayoutConstraint constraintWithItem:toView
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeCenterY
multiplier:1.0f constant:0.0f];
[containerView addConstraints:@[c1, c2]];
toView.alpha = 0.0f;
[UIView animateWithDuration:TRANSITION_DURATION animations:^{
toView.alpha = 1.0f;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}else{
UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];
fromView.alpha = 1.0f;
[UIView animateWithDuration:TRANSITION_DURATION animations:^{
fromView.alpha = 0.0f;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
}
代碼工作,如果動畫:是。
但是,它不工作,因爲我所期望的,當沒有動畫:
[self presentViewController:messageBoxViewController animated:NO completion:nil];
這僅僅是因爲功能-animateTransition:不會被調用時,有不是動畫。因此,我認爲我不應該把這個約束放在這個函數中,但是我應該把它放在哪裏?
我的應用程序需要與iOS 7兼容,因此不允許使用表示控制器。但我需要訪問容器。 那麼我怎麼能展示視圖控制器與自定義過渡-presentViewController:animated:completion:方法。
那麼我該如何解決這個問題呢?