【问题标题】:Cocoa - Animate a NSWindow with setFrameCocoa - 使用 setFrame 为 NSWindow 设置动画
【发布时间】:2011-09-07 21:59:41
【问题描述】:

我有以下代码块。

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

它将框架切换到新视图,但我从来没有得到缩小/增长的动画。如果我把它放在 [window] 之前

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

【问题讨论】:

    标签: objective-c cocoa nswindow


    【解决方案1】:

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

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

    2. 我已经反弹了几乎所有的outlet,因为你不需要contentView这样的东西,因为window本身有contentView这样的属性,所以设置window的contentView属性就足够了。

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

    【讨论】:

    • @eimantes...您的链接已损坏。将东西张贴在永久的地方,这样就不会发生!
    • @alexgray 抱歉链接断开。现在已经修好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    相关资源
    最近更新 更多