首页 > 解决方案 > macOS 中的插入点闪烁间隔

问题描述

我正在研究一个 NSTextView 子类,现在需要在正式的 NSTextView 的插入点计时器停止期间自己绘制文本插入点。我自己绘制成功,但找不到获取文本插入点闪烁时间间隔的方法。

根据我对 NSTextView 的观察,NSTextView(子类)使用私有 NSTimer 管理光标闪烁,但是当 textView 只有非空选择(因为没有要绘制的插入点)或拖动时,此计时器会停用。因此,我需要有自己的计时器,并有适当的间隔来绘制我的假插入点。

挖掘古代OpenStep的源代码,它的神奇数字似乎是0.5秒。但是,如今,用户可以自定义间隔甚至禁用闪烁。同样,系统也可以针对特定情况或将来更改间隔。我想尊重这些偏好,但我找不到合适的方法。

有谁知道如何获得它(无需访问私有 API)?


到目前为止我所做的是:

private struct BlinkPeriod {

    var on: Int
    var off: Int
}


private extension UserDefaults {

    var textInsertionPointBlinkPeriod: BlinkPeriod {

        let onPeriod = self.integer(forKey: "NSTextInsertionPointBlinkPeriodOn")
        let offPeriod = self.integer(forKey: "NSTextInsertionPointBlinkPeriodOff")

        return BlinkPeriod(on: (onPeriod > 0) ? onPeriod : 500,
                           off: (offPeriod > 0) ? offPeriod : 500)
    }

}

但是我觉得它很脏,不知道系统何时更改了期限:/

标签: swiftcocoaappkitnstextviewtextkit

解决方案


推荐阅读