2011-10-17 45 views
1

我有一個Mac應用程序,並且想要在兩種類型的視圖之間切換,從詳細視圖編輯視圖如何使用CATransition在Cocoa中切換視圖控制器?

兩者都有自己的視圖控制器,當DetailViewController加載時,我希望能夠在按鈕按下時加載EditViewController。到目前爲止沒有問題。

但我也想用CATransition或類似的方法使EditViewController從右邊滑入,而DetailViewController滑出到左邊。就像一個圖像旋轉木馬。

如何修改我的當前代碼以支持此轉換效果? (QuartzCore已在項目中導入)

- (IBAction)edit:(id)sender { 
    // NOTE: self is a DetailViewController 
    EditViewController *editController = [[EditViewController alloc] 
      initWithNibName:@"EditView" bundle:nil]; 
    [editController.view setFrame:self.view.frame]; 
    [self.view addSubview:editController.view]; 
} 

回答

-1

我爲iPhone做了一些非常類似的事情。但校長應該非常相似。在下面的代碼示例中,將UIView更改爲NSView,依此類推。

首先,您需要一個處理細節和編輯之間交換的根視圖控制器。

其中,有一個像這樣的方法。傳遞到方法新舊視圖是屬於新舊視圖控制器view實例變量:

- (void) slideInNewViewFromRight:(UIView *)newView oldView:(UIView *)oldView remove:(BOOL)remove 
{ 
    UIView *superView = [oldView superview]; 

    [superView insertSubview:newView belowSubview:oldView]; 

    CGRect oldFrame = [oldView frame]; 
    oldFrame.origin = CGPointMake(-kScreenWidth, 0.0f); 

    CGRect newFrame = [newView frame]; 
    newFrame.origin = CGPointMake(kScreenWidth, 0.0f); 
    newView.frame = newFrame; 

    newFrame.origin = CGPointMake(0.0f, 0.0f); 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UIView setAnimationDuration:kSlideOffDuration]; 
    [UIView setAnimationDelegate:self]; 

     if (remove) { 
      [self setViewToRemove:oldView]; 
      [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; 
     } 

     [oldView setFrame:oldFrame]; 
     [newView setFrame:newFrame]; 

    [UIView commitAnimations]; 
} 

animationDidStop委託方法將處理從superview刪除舊view當它完成:

- (void) animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    [viewToRemove removeFromSuperview]; 
} 

,不要忘了常量:

#define kScreenWidth     320.0f 
#define kSlideInDuration    0.2f 

有人可能是在那裏THI爲什麼我沒有使用UITabBarControllerUINavigationController?答案是,由於我的視圖控制器的非分層結構,在我的案例中都沒有意義。實際上,我的網絡更像。所以,我用自定義的根視圖控制器來處理所有事情。

至於CATransition,我從來沒有用過它。我很想知道更多關於它的應用程序,以及它是否可以爲這個問題提供更優雅的解決方案。

+0

不幸的是,UIViews比NSView載入更多的功能。自從我從iPhone開發到Mac後,我實際上首先研究了您的方法。我不知道爲什麼它在Cocoa上更復雜:/ – Christoffer

+0

這很令人沮喪。這是一個類似的問題,似乎有一個Mac解決方案http://stackoverflow.com/questions/726795/how-can-i-slide-a-view-in-and-out-of-a-window-in-a - 可可程序 –

+0

你能否解釋倒票 –

相關問題