2015-05-19 99 views
1

我有一個視圖控制器,在某些動作呈現另一個視圖控制器,覆蓋屏幕的下半部分。動畫呈現控制器視圖,而動畫呈現控制器視圖

當我從底部爲第二個視圖控制器(呈現視圖控制器)設置動畫以覆蓋屏幕的下半部分時,我還想要將呈現視圖設置爲屏幕上半部分的動畫效果。請參閱下面的代碼 -

- (void)animatePresentationWithTransitioningContext:(id<UIViewControllerContextTransitioning>) transitioningContext 
{ 
    UIViewController *presentedController = [transitioningContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
    UIView *presentedControllerView = [transitioningContext viewForKey:UITransitionContextToViewKey]; 
    UIView *containerView = [transitioningContext containerView]; 

    presentedControllerView.frame = [transitioningContext finalFrameForViewController:presentedController]; 

    CGPoint center = presentedControllerView.center; 
    center.y = containerView.bounds.size.height; 
    presentedControllerView.center = center; 

    [containerView addSubview:presentedControllerView]; 

    // This returns nil 
    UIView *presentingControllerView = [transitioningContext viewForKey:UITransitionContextFromViewKey]; 

    [UIView animateWithDuration:[self transitionDuration:transitioningContext] delay:0.0 usingSpringWithDamping:1.0 initialSpringVelocity:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
     CGPoint presentedViewCenter = presentedControllerView.center; 
     presentedViewCenter.y -= containerView.bounds.size.height/2.0; 
     presentedControllerView.center = presentedViewCenter; 

     // This is where I want to move the presenting view controller. 
     // of course it does not work. 
     CGPoint presentingViewCenter = presentingControllerView.center; 
     presentingViewCenter.y -= containerView.bounds.size.height/2.0; 
     presentingControllerView.center = presentingViewCenter; 

    } completion:^(BOOL finished) { 
     [transitioningContext completeTransition:finished]; 
    }]; 
} 

viewForKey:UITransitionContextFromViewKey回報nil。我覆蓋shouldRemovePresentersView在我的自定義UIPresentationController中返回NO,但我仍得到nil。我正在使用UIModalPresentationCustom作爲我正在呈現的視圖的模式呈現樣式。

編輯:

我意識到,我可以實現通過動畫在我的自定義UIPresentationController重寫presentationTransitionWillBegin方法呈現視圖相同的影響。但我想獲得訪問呈現視圖控制器的答案。

編輯: 既然我已經找到了解決辦法,澄清我的問題:(1)這是預期的行爲即presentingViewController將是零的動畫對象?

+0

你已經證明它不能以第一種方式完成,而且你知道如何以第二種方式完成,所以目前還不清楚你在問什麼。你應該回答你自己的問題,展示你的解決方案,然後繼續。 – matt

+0

@matt看到我上面的編輯 - 「因爲我找到了解決方案,澄清我的問題:(1)這是預期的行爲,即presentationViewController將在動畫師對象中爲零?」 –

+0

我回答說。 – matt

回答

1

我正在使用UIModalPresentationCustom作爲我呈現的視圖的模態呈現樣式。

嗯,這是你的問題。在這種情況下,From視圖將爲零。除非您使用FullScreen演示文稿樣式,否則爲零。

我並不是說你做錯了演示風格Custom。你需要這樣做,如果你想離開呈現視圖控制器的視圖,如果你想提供你自己的演示控制器。你也是!但在這種情況下,作品是分開的:它是呈現控制器負責視圖的最終位置。順便說一句,它發生在我(想一想更多),你正在做的事情,你應該可能不應該做的。您不希望移動呈現視圖控制器的視圖。在呈現視圖控制器的視圖之後拍攝呈現視圖控制器視圖的視圖並動畫可能更安全。

+0

如果你正確理解你,你建議不要使用自定義動畫。正確? –

+0

完全沒有!自定義過渡動畫是我最喜歡的iOS 7/8功能。我只是描述了動畫師和演示控制器如何協同工作。這項工作需要進行適當的分工,例如我在這裏做的:https:// github。com/mattneub/custom-alert-view-iOS7/blob/master/CustomAlertViewDemo/CustomAlertViewTransitioner.swift – matt

+0

我編輯了我的答案,使其更清晰一些。 – matt