Пример анимированного переключения видовых представлений окна.

В данном примере показано, как довольно легко реализовать переключение пользовательских видов в окне.

Видео примера, с реализацией смены вида представления в окне.

Итак для реализации этого примера создадим новый проект Cocoa Application, и установим Use Automatic Reference Counting.

Для начала выделим в созданном за нас Xcode Окне Вид (View) и в инспекторе свойств уберем галочку с Autoresizes Subviews, далее перейдем в закладку View Effects Inspector, view effects inspector все той-же панели инспектора, и выберем эффект анимированного перемещения пользовательских видов при смене, например, как показано ниже:

transitions inspector

Далее создадим три пользовательских вида для отображения наших диалогов, например такие:

Для главного вида, его размер должен совпадать с размером вида контента окна!
switch view

Для вида 1
switch view

Для вида 2
switch view

Теперь создадим для них ссылки в нашем заголовочном файле и свяжем их соответственно:

switch view

Для управления переключением видов добавим к главному окну ToolBar, и отредактируем его, убрав все автоматически созданные кнопки, добавив три своих Image Toolbar Item, назначим каждой кнопке значение Tag от 0 до 2 и свяжем все три с одним обработчиком события selectView.

switch view

Таким образом будет выглядеть наш заголовочный файл *.h:

#import <Cocoa/Cocoa.h>

@interface mbAppDelegate : NSObject <NSApplicationDelegate>
{
  IBOutlet NSView* mainView;
  IBOutlet NSView* view1;
  IBOutlet NSView* view2;
}

@property (assign) IBOutlet NSWindow *window;

-(void) windowChange:(NSWindow*)wnd view:(NSView*)v;
- (IBAction)selectView:(id)sender;

@end

И собственно файл реализации *.m:


#import "mbAppDelegate.h"

@implementation mbAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
  // Insert code here to initialize your application
  
  [_window.contentView addSubview:mainView];//добавляем главный вид к нашему окну
                   // при запуске приложения
}

-(void) windowChange:(NSWindow*)wnd view:(NSView*)v // метод сменяющий виды
{
  NSRect frame = wnd.frame;
  NSView* contentView = wnd.contentView;
  NSView* oldSubView = [contentView.subviews objectAtIndex:0];
  NSInteger dh = oldSubView.frame.size.height - v.frame.size.height;
  NSInteger dw = oldSubView.frame.size.width - v.frame.size.width;
  frame.size.height -= dh;
  frame.size.width -= dw;
  frame.origin.y += dh;
  [[contentView animator] replaceSubview:oldSubView with:v];
  [wnd setFrame:frame display:YES animate:YES];
}

- (IBAction)selectView:(id)sender {
  NSView* v;
  NSInteger t = [sender tag];
  if(!t)
    v = mainView;
  else if(t==1)
    v = view1;
  else
    v = view2;
  [self windowChange:_window view:v];
}

@end

Здесь метод windowChange:view: выполняет собственно смену первого подвида в виде контента окна wnd на вид v.

 
 
homeЗаметили ошибкукарта сайта  EN
   Made on a Mac