Cocoa - 使用setFrame为NSWindow设置动画

时间:2011-09-07 21:59:42

标签: 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 + 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

不确定我错过了什么。

谢谢!

修改

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

http://dl.dropbox.com/u/13731121/Spark.zip

1 个答案:

答案 0 :(得分:3)

我已经审核了您的项目,以下是我的观点:

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

  2. 因为你不需要像contentView这样的东西,所以几乎所有的出口都被反弹,因为窗口本身具有contentView这样的属性,因此它足以设置contentView属性窗口。

  3. 你设置了contentView的FRAME,这是非常非常错误的(除非你真的知道你在做什么)。我已将其更改为设置contentView的BOUNDS。