Простое переключение «View Controllers» в приложениях Mac (аналогично iOS) - PullRequest
6 голосов
/ 31 января 2011

Я работаю в iOS и являюсь новичком в разработке Mac OSX (кокосовое приложение).

Начиная с примера проекта кода Apple " Simple Cocoa App " в качестве основы, я хочу иметь возможность переключаться между различными "контроллерами представления" или даже просто между NSViews любым способом, аналогичнымчто из приложений для iOS.

К сожалению, я не смог найти способ сделать это - и интернету не хватает ресурсов, привязанных к ключевым словам, таким как «Переключение представлений в приложениях какао, переключение представлений в приложениях Mac, руководства по разработке приложений Mac»...

Кто-нибудь из вас знает учебник, который, и вот кикер, на самом деле охватывает вопрос переключения между представлениями?Или, может быть, знаете какой-нибудь быстрый способ, которым вы могли бы объяснить в своем ответе переполнения стека?

Подтверждение концепции Очень простое доказательство концепции может быть следующим.В простом приложении есть два вида - Экран 1 (отображается в данный момент) и Экран 2 (скрыт за пределами экрана):

ШАГ 1) Запустите приложение, появится Экран 1 (содержит метки «Экран 1» и Кнопка »Go Next ")ШАГ 2) Нажмите кнопкуШАГ 3) Экран 1 скользит за кадром какШАГ 4) Экран 2 вставляется (содержит одну метку «Экран 2»)

Спасибо.

Ответы [ 2 ]

16 голосов
/ 31 января 2011

Core Animation не так глубоко интегрирован в OS X, как на iOS. Поэтому вам нужно будет многое сделать самостоятельно. Что вы можете сделать, это использовать 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];
3 голосов
/ 31 января 2011

Возможно, вы захотите проверить PXNavigationBar от Perspx, он может справиться с вашей ситуацией в гораздо более похожем на iOS стиле.

...