2011-09-07 61 views
2

我有以下代碼塊。可可 - 使用setFrame動畫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

回答

3

我查看了您的項目,這裏有我的觀點:

  1. 你的preference.xib是...不標準的說。通常在創建窗口控制器時,應該將窗口控制器類設置爲窗口筆尖的文件所有者。您的preference.xib文件所有者是NSObject,而PreferenceController是單獨的對象。所以我解決了這個問題,並且幾乎所有的IBOutlets都反彈了。

  2. 因爲不需要contentView這樣的東西,因爲我幾乎所有的網點都反彈了,因爲窗口本身具有contentView等屬性,因此足以設置窗口的contentView屬性。

  3. 你設置了contentView的FRAME,這是非常非常錯誤的(除非你真的知道你在做什麼)。我已經改變它來設置contentView的BOUNDS。

+0

感謝代碼清理了一噸,也是您的答案 – Mike

+0

@ eimantes ...您的鏈接已損壞。張貼東西永久的地方,所以不會發生! –

+0

@alexgray對於斷開的鏈接感到抱歉。現在已經修復了。 – Eimantas