Mac OSX自定义屏幕保护程序

时间:2017-08-26 16:32:09

标签: objective-c macos catextlayer

如何使用CATextLayer将文本添加到自定义屏幕保护程序中?

我试图在CATextLayer上显示一系列文字,作为屏幕保护程序的一部分。

- (void) startAnimation
{
    [super startAnimation];

    _textLayer = [CATextLayer layer];
    _textLayer.string = @"Test.";
    _textLayer.frame = self.bounds;
    _textLayer.foregroundColor = [NSColor redColor].CGColor;

    [self.layer addSublayer:_textLayer];
}

_textLayer被定义为实例变量)

我提供了上面的尝试,尝试创建CATextLayer,然后将其添加到屏幕保护程序层......无济于事。当我构建时,然后安装屏幕保护程序,没有任何显示。

我在网上浏览过,但无法找到在屏幕保护程序中使用CATextLayer的示例。

https://www.raywenderlich.com/90488/calayer-in-ios-with-swift-10-examples

上面的网站使用CATextLayer,但不是特别在屏幕保护程序的上下文中。

1 个答案:

答案 0 :(得分:0)

这有点旧,但是为了后代的缘故,您需要首先创建一个覆盖屏幕的图层,并将其分配给(屏幕保护程序)视图。从那时起,您可以添加CATextLayer或其他图层。

        self.layer = CALayer()
        guard let layer = self.layer else {
            errorLog("\(self.description) Couldn't create CALayer")
            return
        }
        self.wantsLayer = true
        layer.backgroundColor = NSColor.black.cgColor
        layer.needsDisplayOnBoundsChange = true
        layer.frame = self.bounds

以这种方式行事的人,无论如何,我都会极力建议您考虑使用NSTextView,它使事情变得如此简单:

        // This is the debug view
        let debugTextView = NSTextView(frame: bounds.insetBy(dx: 20, dy: 20))
        debugTextView.font = .labelFont(ofSize: 30)
        debugTextView.string += "Radar# FB7486243 (isPreview bug) : \(isPreviewBug) \n"
        
        self.addSubview(debugTextView)