2011-07-19 48 views
0

我想解僱一個視圖控制器從底部到頂部而不是標準的從右到左的過渡。這是可能嗎?這裏是我到目前爲止的代碼:關閉一個UIViewController從底部到頂部而不是從右到左

CGRect screenRect = [[UIScreen mainScreen] applicationFrame]; 

CGRect endFrame = self.view.frame; 
endFrame.origin.y = screenRect.origin.y - screenRect.size.height; 

UIView *aView = [[self.view retain] autorelease]; 
[self.view.window addSubview:aView]; 
aView.frame = CGRectMake(0, 0, 320, 460); 
[UIView animateWithDuration:0.5 
       animations:^{ 
        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
        aView.frame = endFrame; 
       } 
       completion:^(BOOL finished) { 
        [self dismissModalViewControllerAnimated:NO]; 
        [aView removeFromSuperview]; 
       } 
]; 

這確實會導致過渡;但之前的視圖控制器不會出現,直到動畫後,因爲我不能解僱,直到它完成後...任何想法?

+0

您是否正在使用基於導航控制器的應用程序? – booleanBoy

+0

是的,這是一個基於導航控制器的應用程序 – avenged

+0

你試過了presentModalViewController嗎?你可以使用達到你想要達到的動畫效果 – booleanBoy

回答

2

呃,當你提交ModalViewController時,它會自動隱藏後面的視圖。你需要做的是不存在並移除,但將視圖控制器視圖添加爲主視圖的子視圖。然後,您只需在屏幕外設置動畫效果,並在比賽處理程序中移除FromSuperview。

+0

這是推薦的方法嗎?我在過去看過一些文章,建議不要將UIViewController作爲子視圖添加到另一個控制器。每個屏幕一個視圖控制器。 – avenged

+0

這種方法完美,所以我會繼續並接受它作爲一個很好的解決方案。看起來,當將UIViewController作爲子視圖添加到另一個控制器時,大多數人遇到的問題是當不全屏使用視圖控制器時。 – avenged

+0

這是一個非常好的解決方案。事實上,這是iOS5之前的唯一途徑。當你使用presentModal時,dismissModal方法 - 它也在做一些非常類似的事情。 –

相關問題