我创建了一个相当简单的屏幕保护程序,可以在 Mac OS 10.6.5 上运行而没有问题。
配置屏幕已经积累了很多不同的选项,我正在尝试在 configureSheet 窗口上实现我自己的预览,以便用户(目前只有我)可以立即看到更改的效果,而无需确定并测试每个更改。
我NSView
在 configureSheet 中添加了一个,并将 Interface Builder 中的自定义类设置为我的 ScreenSaverView 子类。我知道这drawRect:
是触发,因为我可以删除将视图清除为黑色的条件,并且我的自定义预览不再显示为黑色背景。这里是那个函数(基于网上的几个精品教程):
- (void)drawRect:(NSRect)rect
{
if ( shouldDrawBackground )
{
[super drawRect:rect];
shouldDrawBackground = NO;
}
if (pausing == NO)
[spiroForm drawForm];
}
spiroForm 类简单地将自己绘制到 ScreenSaverView 框架中NSBezierPath
,并且如上所述,对于实际的屏幕保护程序或内置的系统偏好设置预览没有问题。自定义预览 (configureView) 框架被传递给它本身的 init 方法(因为它的自定义类是我的 ScreenSaverView 子类。)-initWithFrame
在将 configureSheet 对象返回给操作系统之前,在 configureSheet 中调用该方法:
[configureView initWithFrame:[configureView bounds] isPreview:YES];
也许我不必这样做?这只是我试图查看是否需要绘图的东西。
我最终向 configureSheet 添加了一个委托,以尝试通过和通知触发我的预览startAnimation
和功能,但由于某种原因,这些似乎没有被调用。委托被声明为,我在返回 configureSheet 对象之前在 configureSheet 方法中设置了委托。stopAnimation
windowWillBeginSheet
windowWillEndSheet
NSObject <NSWindowDelegate>
我已经为此工作了好几天,但无法找到有关操作系统如何管理 ScreenSaverView 对象的任何信息(我认为这是我试图通过运行自己的副本来模拟的内容。)
有人对如何管理这个有任何建议,或者苹果是否在我没有找到的地方记录了它?这对于屏幕保护程序来说并不是真正需要的,我只是觉得它会很有趣(我还寻找了一种使用操作系统预览的方法,但是在激活 configureSheet 时它被阻止了。)