轻松切换Mac应用程序中的“视图控制器”(类似于iOS)

时间:2011-01-31 10:09:59

标签: cocoa nsview macos

我来自iOS背景,是Mac OSX(coco app)开发的新手。

从Apple示例代码项目“Simple Cocoa App”开始,我希望能够以任何类似于iOS应用程序的方式在不同的“视图控制器”之间切换,甚至只在NSView之间切换。

不幸的是,我无法找到实现这一目标的方法 - 并且互联网缺乏与关键字相关的资源,例如“在可可应用中查看切换,在mac应用程序中切换视图,mac app dev教程”...... / p>

你们中的任何人都知道一个教程,而且这里是踢球者,实际上 涵盖 在视图之间切换的问题?或者也许知道你可以在Stack Overflow答案中解释的任何快捷方式?

概念证明 一个非常简单的概念验证可能如下。在一个简单的应用程序中,有两个视图 - 屏幕1(当前显示)和屏幕2(隐藏屏幕外):

步骤1)启动应用程序,出现屏幕1(包含标签“屏幕1”和按钮“转到下一步”)
步骤2)按下按钮
步骤3)屏幕1在屏幕外滑动为
步骤4)屏幕2幻灯片放入(包含单个标签“屏幕2”)

感谢。

2 个答案:

答案 0 :(得分:16)

核心动画并没有像在iOS上那样深入集成在OS X中。 因此,您需要自己做很多事情。 你可以做的是使用窗口的contentView作为超级视图,然后执行以下操作切换到另一个视图(动画)。

- (void)switchSubViews:(NSView *)newSubview
{
  NSView *mainView = [[self window] contentView];
  // use a for loop if you want it to run on older OS's
  [mainView removeAllSubViews];

  // fade out
  [[mainView animator] setAplhaValue:0.0f];

  // make the sub view the same size as our super view
  [newSubView setFrame:[mainView bounds]];
  // *push* our new sub view
  [mainView addSubView:newSubView];

  // fade in
  [[mainView animator] setAlphaValue:1.0f];
}

然而,这不会给你你想要的效果。如果您希望它为其提供sorta move 效果,则必须包含QuartzCore.framework并执行以下操作:

- (void)prepareViews
{ // this method will make sure we can animate in the switchSubViewsMethod
  CATransition *transition = [CATransition animation];
  [transition setType:kCATransitionPush];
  [transition setSubtype:kCATransitionFromLeft];
  NSView *mainView = [[self window] contentView];
  [mainView setAnimations:[NSDictionary dictionaryWithObject:transition forKey:@"subviews"]];
  [mainView setWantsLayer:YES];
}

然后在switchSubViews中:你只需要使用:

[[mainView animator] addSubView:newSubView];

答案 1 :(得分:3)

您可能希望通过Perspx查看PXNavigationBar,它可以在更像iOS的情况下处理您的情况。