2011-01-08 62 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中。

仍然在解决一些问题,但现在当我点击我的屏幕保护程序选项按钮时,我的配置表下拉菜单并在设置选项时显示自己的预览。啧。这些小细节让我跳跃起来。无论如何,我喜欢它。步步高升。