코코아 애니메이션 예제
코코아 애니메이션을 사용하여 창의 투명도를 변화시키는 예제. 애플 개발자 문서에서 구할 수 있다. 주요내용은 마우스가 들어오면 불투명해지고 마우스가 나가면 몇 초 후부터 서서히 투명해져 10%까지 투명해지는 창을 만든다.
창의 제어를 위해서 NSWindowController를 사용하고 있으며, NSTrackingArea를 사용하고 있다.
//마우스가 들어오면 불투명하고, 마우스가 나가면 약간의 딜레이 후 투명해지는 애니메이션을 구현한다. // InspectorController.h #import <Cocoa/Cocoa.h> @interface InspectorController : NSWindowController { NSTimer *fadeTimer; } @end // InspectorController.m #import "InspectorController.h" @implementation InspectorController -(id)init { self = [super initWithWindowNibName:@"Inspector"]; // Inspector.xib 파일이 있어야 한다. return self; } -(void)dealloc { fadeTimer = nil; // ARC 환경에서 [super dealloc]은 부를 수 없다. } -(void)setFadeTimer:(NSTimer*)timer { if (fadeTimer != timer) { [fadeTimer invalidate]; fadeTimer = timer; } } // 윈도우가 로드되면 트랙킹 영역을 추가해서 마우스가 들어오고 나가는 것을 잡는다. -(void)windowDidLoad { NSView *containingView = [[[self window] contentView] superView]; NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[containingView frame] options:NSTrackingMouseEnteredAndExited | NSTrackingActiveInActiveApp | NSTrackingInVisibleRect owner:self userInfo:nil]; [containingView addTrackingArea:area]; // 타이머를 추가해서 4초 후에 페이딩이 시작되도록 한다. NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(startFade:) userInfo:nil repeats:NO]; self setFadeTimer = timer; } -(void)mouseEntered:(NSEvent*)event { [self setFadeTimer:nil]; [[[self window] animator] setAlphaValue:1.0]; } -(void)mouseExited:(NSEvent*)event { // 마우스가 빠져나가면 잠시 후 페이딩이 시작된다. NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(startFade:) userInfo:nil repeat:NO]; [self setFadeTimer:timer]; } //실제 투명화 동작 -(void)startFade:(NSTimer*)timer { [NSAnimationContent beginGroup]; // ??? [[NSAnimationContext currentContext] setDuration:10.0]; [[[self window] animator] setAlphaValue:3.0]; [NSAnimationContext endGrouping]; [self setFadeTimer:nil]; // 애니메이션이 시작됨과 동시에 타이머는 nil로 초기화한다. } @end