2012-09-01 47 views
3

在我的程序中,我有一個窗口,用戶在屏幕上放置他想要拍攝的部分。NSWindow orderOut - 有沒有辦法等待窗戶關閉?

然後,當他點擊按鈕拍攝照片時,我的程序orderOut就是窗口,截屏並再次顯示窗口,現在用截圖顯示。

問題是,orderOut似乎沒有立即關閉窗口。因此,當我截取屏幕截圖時,通常需要截取窗口本身(應該已關閉),這顯然不是我想要的。

在撥打orderOut之後,我已經能夠通過撥打sleep(1)來解決問題,但肯定有更好的方法嗎?

+1

沒有什麼錯誤使用performSelector:withObject:afterDelay :,它不是黑客攻擊。我認爲orderOut發生的速度與屏幕的刷新速度一樣快,這可能比執行一行代碼慢得多。另一種方法可能是實現委託方法windowDidResignMain:在窗口關閉時調用該方法,並在那裏調用圖片獲取方法。這可能會讓它有足夠的時間消失。 – rdelmar

回答

2

根據文檔here。您打電話給orderOut時,該窗口會動畫。因此,您可以通過設置動畫的行爲沒有刪除orderOut動畫:

[myWindow setAnimationBehavior:NSWindowAnimationBehaviorNone] 

或使用NSObject的方法performSelector:withObject:afterDelay:一定時間x之後進行屏幕觸操作。假設NSWindow orderOut動畫使用默認持續時間,則延遲爲0.2f。否則,您可以進行一些測試以檢查您的情況下適合的值。

+1

剛試過禁用動畫,它仍然不起作用。 'performSelector:withObject:afterDelay:'只是另一種做我'睡眠'的方法。 – houbysoft

相關問題