macOS中的插入点闪烁间隔

时间:2019-01-05 07:07:05

标签: swift cocoa appkit nstextview textkit

我正在研究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)
    }

}

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

0 个答案:

没有答案