swift - 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)
}
}
但是我觉得它很脏,不知道系统何时更改了期限:/
解决方案
推荐阅读
- java - 如何在 Java 中将 Firefox 配置文件和 Firefox 选项与 Selenium 一起使用
- javascript - 尝试使用javascript从表单中获取值
- reactjs - 如何根据 react-router-dom 中组件的 props 创建动态路由命名路由
- html - 为什么在伪元素上使用 z-index 时使用 CSS 转换属性会破坏堆叠顺序?
- python - 拆分文本以获取年份
- javascript - “点击”事件不为开玩笑而触发
- javascript - 请问有没有其他方法??Javascript
- c++ - 什么是“数据包类型 ID”?
- svelte - 为什么 Codesandbox.io 上的 Svelte 应用程序会导致 TypeError ... is not a constructor?
- android-studio - 我找不到在 Android Studio 中创建的 recyclerview 的 setOnItemClickListener