2011-10-17 49 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

你能否解释倒票 –

相关问题