我正在構建一種中間有分支的複雜應用程序。解除堆棧中較低的ViewController的行爲並不像預期的那樣
在應用程序的某個位置,顯示了一個特定的UIViewController,我們將其稱爲mainViewController
(縮寫爲mainVC
)。
的mainVC
提出了另一個視圖控制器,通過代碼,使用下面的代碼(I去掉隱私的原因它的一部分):
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SecondaryStoryboard" bundle:secondaryBundle];
SecondViewController *secondVC = [storyboard instantiateInitialViewController];
[self presentViewController:secondVC animated:YES completion:nil];
所以稍後將呈現另一視圖控制器,稱爲thirdVC
。這是使用自定義SEGUE完成的,在代碼中使用上面的故事板,其代碼如下設置:
@implementation VCCustomPushSegue
- (void)perform {
UIView *sourceView = ((UIViewController *)self.sourceViewController).view;
UIView *destinationView = ((UIViewController *)self.destinationViewController).view;
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
destinationView.center = CGPointMake(sourceView.center.x + sourceView.frame.size.width, destinationView.center.y);
[window insertSubview:destinationView aboveSubview:sourceView];
[UIView animateWithDuration:0.4
animations:^{
destinationView.center = CGPointMake(sourceView.center.x, destinationView.center.y);
sourceView.center = CGPointMake(0 - sourceView.center.x, destinationView.center.y);
}
completion:^(BOOL finished){
[self.sourceViewController presentViewController:self.destinationViewController animated:NO completion:nil];
}];
}
@end
正如你可以看到這個賽格瑞呈現目的地視圖控制器模態(通過使用presentViewController:
)用自定義動畫(從右到左滑動)。
所以基本上到這裏一切都很好。我用典型的模態動畫(從底部向上滑動)呈現,並用我的自定義過渡呈現thirdVC
。
但是,當我想解僱thirdVC
時,我想要直接返回到mainVC
。所以我所說的從thirdVC
如下:
self.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:_animate completion:nil];
這樣的話,我直接調用dismissViewControllerAnimated:
上mainVC
(由self.presentingViewController.presentingViewController
引用),和我期待的thirdVC
與動畫中被解僱,而沒有動畫就消失。
隨着蘋果說,在UIViewController類文檔:
的呈現視圖控制器負責駁回視圖 控制器它呈現。如果您在所呈現的視圖 控制器本身上調用此方法,它會自動將消息轉發給呈現視圖控制器的 。
如果連續介紹幾個視圖控制器,從而構建一個 堆棧呈現視圖控制器,調用視圖 控制器這種方法在堆棧中較低駁回其直接子視圖 控制器及以上的所有視圖控制器那個孩子在堆棧。 當發生這種情況時,只有最頂級的觀點被取消動畫 時尚;任何中間視圖控制器都會從 堆棧中簡單地刪除。最頂端的視圖使用其模式轉換 樣式被忽略,這可能與堆棧中較低的其他視圖控制器 使用的樣式不同。
問題是,它不會發生什麼。在我的場景中,thirdVC
消失,並且顯示被經典模態幻燈片解散爲底部動畫。
我在做什麼錯?
編輯:
所以@ codeFi的回答以經典的項目可能是工作,但這裏的問題是,我工作的一個框架。因此,mainVC
將位於客戶端應用程序中,並且和thirdVC
位於我的框架中,位於單獨的故事板中。我不能以任何其他方式訪問mainVC
而不是在我的代碼中引用它,所以不幸的是,這裏展開的segues不是一個選項。
這種行爲的改變發生在iOS 8中,7它確實工作正常。我正在嘗試解決它。 – theLastNightTrain 2014-10-21 16:23:13
@theLastNightTrain:嗯,你是對的,它只發生在iOS 8上。讓我知道你是否發現任何東西.. – rdurand 2014-10-22 07:17:57
@theLastNightTrain:有沒有更新?我很樂意提供一個解決這個問題的答案賞金.. – rdurand 2014-10-27 13:58:19