Objective c Cocoa-使用setFrame设置NSWindow的动画

Objective c Cocoa-使用setFrame设置NSWindow的动画,objective-c,cocoa,nswindow,Objective C,Cocoa,Nswindow,我有下面的代码块 NSRect windowFrame = [window frame]; windowFrame.size.height = [view frame].size.height + WINDOW_TOOLBAR_HEIGHT; windowFrame.size.width = [view frame].size.width; windowFrame.origin.y = NSMaxY([window frame]) - ([view frame].size.height + WI

我有下面的代码块

NSRect windowFrame = [window frame];
windowFrame.size.height = [view frame].size.height + WINDOW_TOOLBAR_HEIGHT;
windowFrame.size.width = [view frame].size.width;
windowFrame.origin.y = NSMaxY([window frame]) - ([view frame].size.height + WINDOW_TOOLBAR_HEIGHT);

if ([[contentView subviews] count] != 0)
{
    [[[contentView subviews] objectAtIndex:0] removeFromSuperview];
}

[window setFrame:windowFrame display:YES animate:YES];
[contentView setFrame:[view frame]];
[contentView addSubview:view];  
它将帧切换到新视图,但我从未得到缩小/增长的动画。如果我把这个放在[窗口]前面

NSLog([NSString stringWithFormat: @"%.2f", windowFrame.size.height]);
我有不同的尺码。。这是输出

2011-09-07 14:13:02.418 Spark[29919:903] 492.00
2011-09-07 14:13:03.610 Spark[29919:903] 580.00
2011-09-07 14:13:05.955 Spark[29919:903] 492.00
2011-09-07 14:13:08.339 Spark[29919:903] 255.00
不知道我错过了什么

谢谢

编辑

我添加了一个简单的项目来查看我的问题


我已经回顾了你的项目,以下是我的观点:

  • 您的首选.xib是。。。至少可以说是不标准的。通常在创建窗口控制器时,应该将窗口控制器类设置为窗口nib的文件所有者。preference.xib文件所有者是
    NSObject
    ,而
    PreferenceController
    是单独的对象。所以我已经解决了这个问题,几乎所有的IBO都反弹了

  • 我已经恢复了几乎所有的outlet,因为您不需要像
    contentView
    这样的东西,因为窗口本身有
    contentView
    这样的属性,因此设置窗口的contentView属性就足够了

  • 您设置contentView的框架是非常非常错误的(除非您真的知道自己在做什么)。我改为设置contentView的边界


  • @艾曼特斯…你的链接断了。把东西永久地贴在某个地方,这样就不会发生了@阿列克斯格雷为断开的链接感到抱歉。现在修好了。