我创建了一个非常简单的屏幕保护程序,可以在Mac OS 10.6.5上运行而没有问题。
配置屏幕已经积累了很多不同的选项,我正在尝试在configureSheet窗口上实现我自己的预览,这样用户(只有我,当前)可以立即看到更改的效果而无需确定和测试每次改变。
我在configureSheet中添加了NSView
,并将Interface Builder中的自定义类设置为我的ScreenSaverView子类。我知道drawRect:
正在解雇,因为我可以删除将视图清除为黑色的条件,并且我的自定义预览不再显示黑色背景。
这是该功能(基于互联网上的几个精细教程):
- (void)drawRect:(NSRect)rect
{
if ( shouldDrawBackground )
{
[super drawRect:rect];
shouldDrawBackground = NO;
}
if (pausing == NO)
[spiroForm drawForm];
}
spiroForm类只是使用NSBezierPath
将自己绘制到ScreenSaverView框架中,并且如上所述,对于实际的屏幕保护程序或内置的“系统偏好设置”预览不会有问题。自定义预览(configureView)框架被传递给um本身的init方法(因为它的自定义类是我的ScreenSaverView子类。)在将configureSheet对象返回到OS之前,在configureSheet中调用-initWithFrame
方法: / p>
[configureView initWithFrame:[configureView bounds] isPreview:YES];
也许我不必这样做?这只是我试图看到它是否需要绘图。
我最终在configureSheet中添加了一个委托,尝试通过startAnimation
和stopAnimation
通知触发预览的windowWillBeginSheet
和windowWillEndSheet
功能,但这些功能不会出现因某种原因被召唤。委托声明为NSObject <NSWindowDelegate>
,并在返回configureSheet对象之前在configureSheet方法中设置委托。
我已经做了好几天了,但是还没找到任何关于操作系统如何管理ScreenSaverView对象的东西(我认为这是我试图通过运行我自己的副本来模拟的。)< / p>
是否有人对如何管理此问题有任何建议?如果Apple将文档记录在我尚未找到的地方?这不是屏幕保护程序真正需要的工作,我只是觉得它很有趣(我也想办法使用操作系统预览,但是在激活configureSheet时它被阻止了。)
答案 0 :(得分:0)
好的,解决方案中有几个'呃'的时刻:
首先,我正在将工作表通知的委托设置为工作表本身。工作表所属的窗口会收到通知。
其次,表单所属的窗口是由系统偏好设置所拥有的,我没有看到任何方法将我的委托类设置为该窗口的委托,因此整个委托事物似乎不是可行的解决方案。
我最后为configureSheet继承了NSWindow,这样我就可以通过覆盖makeKeyWindow和close方法在我的预览中启动和停止动画。
- (void) makeKeyWindow
{
if (myPreview != nil)
if ( ! [myPreview isAnimating])
{
[myPreview startAnimation];
}
[super makeKeyWindow];
}
我还必须为我的预览对象本身添加一个IBOutlet,并在Interface Builder中连接它。
仍在解决几个问题,但现在当我点击我的屏幕保护程序选项按钮时,我的configureSheet会下拉并在您设置选项时显示自己的预览。啧。我为这些小小的细节跳了起来。无论如何,我喜欢它。向前和向上。