开发者

Cocoa - Animate a NSWindow with setFrame

I have the following block of code.

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

It switches the frame to the new view but I never get a shrinking/growing animation. If I place this before the [window]

NSLog([NSString stringWithFormat: @"%.2f", windowFrame.size.height]);

I get different sizes.. here is the output

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.开发者_StackOverflow中文版339 Spark[29919:903] 255.00

Not sure what I am missing.

thanks!

EDIT

I've added a simple project to see my issues

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


I've reviewed your project and here are my points:

  1. Your preference.xib is... non standard to say the least. Usually when creating window controller, you should set window controller class as window nib's file owner. Your preference.xib file owner is NSObject while PreferenceController is separate object. So I've fixed that and rebound almost all IBOutlets.

  2. I've rebound almost all outlets because you don't need such thing as contentView, because window itself has such property as contentView, hence it's enough to set the contentView property of the window.

  3. You set contentView's FRAME which is very, very wrong (unless you really know what you're doing). I've changed it to set contentView's BOUNDS instead.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜