gpt4 book ai didi

swift - 如何防止 NSCursor 发生变化?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:17 30 4
gpt4 key购买 nike

我在尝试阻止光标更改时遇到问题。我尝试在整个窗口上放置一个叠加 View ,但是,如果在该叠加层下存在一个 NSTextView,这将强制更改光标。我想防止这种情况发生,并保持箭头光标直到我的叠加 View 被删除。

覆盖 cursorUpdate 方法不起作用:

override func cursorUpdate(with event: NSEvent) {
return
}

谢谢!

甚至this question 回答没有帮助。此解决方案仅在覆盖 View 小于 TextView 时有效。

enter image description here

最佳答案

如果 NSTextView 是您的,您可以通过子类化和覆盖那里的 mouseMoved: 来获得您想要的行为。 There are several examples available, if you search .

如果子类化 TextView 不是一个选项,最好的办法是使用 NSWindow 作为您的叠加层。

  • 使用 NSWindowStyleMaskBorderless 样式掩码创建窗口。
  • 使窗口不透明,设置alpha、背景色
  • 使用 addChildWindow:ordered 定位叠加层

This answer解释得很好。

像这样:

var rect = NSRect(x: self.window.frame.origin.x, y: self.window.frame.origin.y, width: self.window.contentView.frame.size.width, height: self.window.contentView.frame.size.height)
var overlay = NSWindow.init(contentRect: rect, styleMask: .borderless, backing: .buffered, defer: false)
overlay.backgroundColor = .red
overlay.isOpaque = false
overlay.alphaValue = 0.5
self.window.addChildWindow(overlay, ordered: .above)

现在您可以将覆盖 View 添加为窗口的 contentView。光标不会随着下面的 View 而改变。

参见 also .

关于swift - 如何防止 NSCursor 发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49543750/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com