2016-03-04 55 views
0

我需要在另一個視圖控制器的中心呈現視圖控制器與一些動畫效果。我希望轉換是可重用的,所以我定義了一個類來實現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]; 
    }]; 
} 

}

代碼工作,如果動畫:是。

enter image description here

但是,它不工作,因爲我所期望的,當沒有動畫:

[self presentViewController:messageBoxViewController animated:NO completion:nil]; 

enter image description here

這僅僅是因爲功能-animateTransition:不會被調用時,有不是動畫。因此,我認爲我不應該把這個約束放在這個函數中,但是我應該把它放在哪裏?

我的應用程序需要與iOS 7兼容,因此不允許使用表示控制器。但我需要訪問容器。 那麼我怎麼能展示視圖控制器與自定義過渡-presentViewController:animated:completion:方法。

那麼我該如何解決這個問題呢?

回答

0

不要添加約束,嘗試使用幀動畫。它會工作。但是如果你將動畫製作成NO,那麼顯然它永遠不會被執行。 如果你面臨很多問題,那麼你可以做的是,拍攝sourceController的快照並將其添加到你的目標控制器,然後將你的視圖動畫到中心。確保你的動畫屬性是錯誤的。

相關問題