2011-01-08 42 views
0

我已經創建了一個相當簡單的屏幕保護程序,可以在Mac OS 10.6.5上正常運行。如何激活Cocoa/Obj-C中的自定義屏幕保護程序預覽?

配置屏幕已經積累了很多不同的選項,我試圖在configureSheet窗口上實現我自己的預覽,這樣用戶(當前就是我)可以立即看到更改的效果,而不必測試每個更改。

我已經添加了一個NSView到configureSheet和在Interface Builder中自定義類設置爲我ScreenSaverView子類。我知道drawRect:正在觸發,因爲我可以刪除將視圖清除爲黑色的條件,並且我的自定義預覽不再以黑色背景顯示。 這裏是一個函數(基於幾個精細的教程在互聯網上):

- (void)drawRect:(NSRect)rect 
{ 
    if (shouldDrawBackground) 
    { 
     [super drawRect:rect]; 
     shouldDrawBackground = NO; 
    } 
    if (pausing == NO) 
     [spiroForm drawForm]; 
} 

的spiroForm類只是自己畫成使用NSBezierPath的ScreenSaverView幀,如前所述,是不成問題的實際屏保或內置在系統首選項預覽。

[configureView initWithFrame:[configureView bounds] isPreview:YES]; 
:自定義預覽(configureView)幀的configureSheet對象返回到操作系統之前傳遞到init方法爲,嗯,本身(因爲它的自定義類是我ScreenSaverView子類。)的 -initWithFrame方法被調用configureSheet

也許我不必那樣做?這只是我試圖看看它是否需要繪圖。

我最終加入了代表對configureSheet嘗試通過windowWillBeginSheetwindowWillEndSheet通知觸發我的預覽的startAnimationstopAnimation功能,但這些似乎並沒有被獲取調用由於某種原因。該委託聲明爲NSObject <NSWindowDelegate>,並在返回configureSheet對象之前將該委託設置在configureSheet方法中。

我一直在這個工作了幾天,但一直沒有找到任何關於操作系統如何管理ScreenSaverView對象的信息(我認爲這是我試圖通過運行我自己的副本來模擬)。

有誰知道如何管理這個或者如果蘋果文件它的地方的任何建議,我還沒有發現?這是不是真的需要將屏幕保護工作,我只是覺得這會很有趣(我也看了一種方式來使用OS預覽,但同時configureSheet被激活,它的封鎖。)

+0

請花時間使用編輯器控件正確設置代碼的格式。 – 2011-01-08 21:56:47

回答

0

OK,有一對夫婦參與瞭解決方案「杜」的時刻:

首先,我設置爲表通知片本身的委託。表屬於的窗口獲取通知。

其次,工作表所屬的窗口屬於系統偏好設置,我沒有看到任何方法將我的委託類設置爲該窗口的委託,因此整個委託似乎不是一個可行的解決方案。

我結束了繼承NSWindow的configureSheet這樣我就可以開始,並在我的預覽停止動畫壓倒一切的makeKeyWindow和close方法。

- (void) makeKeyWindow 
{ 
    if (myPreview != nil) 
     if (! [myPreview isAnimating]) 
     { 
     [myPreview startAnimation]; 
     } 
    [super makeKeyWindow]; 
} 

我還必須爲我的預覽對象本身添加一個IBOutlet並將它連接到Interface Builder中。

仍然在解決一些問題,但現在當我點擊我的屏幕保護程序選項按鈕時,我的配置表下拉菜單並在設置選項時顯示自己的預覽。嘖。這些小細節讓我跳躍起來。無論如何,我喜歡它。步步高昇。

相關問題