objective-c - 为什么这个非常简单的空白屏幕保护程序不起作用? (是黑色的)

标签 objective-c macos cocoa screensaver

我正在尝试通过 XCode 中的 Objective-C 制作一个简单的 macOS 屏幕保护程序,它只会用白色填充整个屏幕。 (因为this。)很简单,对吧?我也是这么想的,但无论我做什么,我都会得到一个空白的黑屏。看起来我的drawRect方法甚至没有被调用。知道我错过了什么吗?

#import "Blank_WhiteView.h"

@implementation Blank_WhiteView

- (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview {
    [super animateOneFrame];
    [self setNeedsDisplay:YES];
    return self;
}

- (void)drawRect:(NSRect)rect {

    [super drawRect:rect];
    CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
    CGContextFillRect(context, NSRectToCGRect(rect));
}

- (BOOL)hasConfigureSheet {
    return NO;
}

@end

最佳答案

ScreenSaverView 通过-animateOneFrame 绘制所有内容。为了能够使用 -drawRect (在您的情况下,您应该,因为您没有对任何内容进行动画处理)实现 animateOneFrame ,以便:

- (void)animateOneFrame {
    [self setNeedsDisplay:YES]; // -drawRect will be called next draw loop
}

这样,-drawRect 将在适当的时候被调用。

关于objective-c - 为什么这个非常简单的空白屏幕保护程序不起作用? (是黑色的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548078/

相关文章:

iphone - 当我的应用程序处于后台时,只有当我触摸顶部通知横幅并且在我单击应用程序图标时不工作时才会处理推送通知

ios - Swift 3.0 无法将 (_, _)->() 类型的值转换为预期参数类型 'ObjectsOrErrorBlock'

objective-c - Main 中 UIApplicationMain 之后的 Objective C 执行顺序是什么?

swift - 在输入 NSTextField 时过滤 NSTable - 自动选择第一行

iphone - 在 iOS 上读取证书问题

javascript - 为什么 Applescript 中的 'do javascript' 调用在输入到浏览器中的相同代码执行时不执行?

objective-c - OS X - 如何检测硬盘事件?

cocoa - 绑定(bind) - 主细节数组 Controller

macos - 如何在 super View 中移动 subview

cocoa - 如何在代码中接收 slider 的当前值?在 cocoa 中