Cocoa 使用轻松动画调整NSWindows的大小

Cocoa 使用轻松动画调整NSWindows的大小,cocoa,core-animation,nswindow,Cocoa,Core Animation,Nswindow,我正在尝试用一个很好的放松动画(EaseOut)来调整NSWindow(主窗口)的大小 我可以使用[NSWindow animator],但我还没有找到一种方法来添加缓和效果 您有什么想法或代码示例可以帮助我做到这一点吗?选项1 float Y = 100; float X = 200; NSRect frame = [window frame]; frame.origin.y -= Y; frame.size.height += Y; frame.size.width += X; [wi

我正在尝试用一个很好的放松动画(EaseOut)来调整NSWindow(主窗口)的大小

我可以使用
[NSWindow animator]
,但我还没有找到一种方法来添加缓和效果


您有什么想法或代码示例可以帮助我做到这一点吗?

选项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]; 

当你想再次显示窗口时,别忘了将alpha值设置为1.0。

Hi Anne,谢谢你的代码片段,但是你的解决方案没有很好的缓和效果,你有什么想法吗?使用
animate:YES
可以使它变得漂亮和平滑。请澄清您需要的“很好的放松效果”。我指的是您可以在使用
NSAnimation
NSAnimationEaseIn
添加的工作片段中看到的动画节奏。这正是我想要的!我只是错过了
[animation setAnimationCurve:NSAnimationEaseIn]零件。谢谢你的帮助;)那会把窗户藏起来的。另外,当通过
setHidden:YES
完成不透明度动画时,您应该隐藏它(真实)。但这与调整窗口大小无关??
[[NSWindow animator] setAlphaValue:0.0];