Изменение размера NSWindows с облегчением анимации - PullRequest
15 голосов
/ 03 июня 2011

Я пытаюсь изменить размер NSWindow (основного) с хорошей анимацией замедления (EaseOut).

Я могу использовать [NSWindow animator], но я не нашел способа добавить замедлениеЭффект.

У вас есть идея или пример кода, который может помочь мне сделать это?

Ответы [ 2 ]

32 голосов
/ 03 июня 2011

Опция 1

float Y = 100;
float X = 200;

NSRect frame = [window frame];

frame.origin.y -= Y;
frame.size.height += Y;
frame.size.width += X;

[window setFrame:frame display:YES animate:YES];

Опция 2

float Y = 100;
float X = 200;

NSRect frame = [window frame];

frame.origin.y -= Y;
frame.size.height += Y;
frame.size.width += X;

NSDictionary *windowResize = @{
    NSViewAnimationTargetKey: window,
    NSViewAnimationEndFrameKey: [NSValue valueWithRect:frame]
};
NSDictionary *oldFadeOut = @{
    NSViewAnimationTargetKey: [NSNull null],
    NSViewAnimationEffectKey: NSViewAnimationFadeOutEffect
};
NSDictionary *newFadeIn = @{
    NSViewAnimationTargetKey: [NSNull null],
    NSViewAnimationEffectKey: NSViewAnimationFadeInEffect
};

NSArray *animations = @[windowResize, newFadeIn, oldFadeOut];
NSViewAnimation *animation = [[NSViewAnimation alloc] initWithViewAnimations: animations];

[animation setAnimationBlockingMode: NSAnimationBlocking];
[animation setAnimationCurve: NSAnimationEaseIn];
[animation setDuration: 2];     
[animation startAnimation]; 
0 голосов
/ 09 ноября 2012
[[NSWindow animator] setAlphaValue:0.0];

Не забудьте установить значение альфа-канала на 1,0, когда вы хотите снова показать окно.

...