SwiftUI 系统光标

标签 swift pointers cursor swiftui mouse

我试图在 MacOS 上将光标更改为 SwiftUI 中的十字准线。

我已将以下代码放入 AppDelegate applicationDidFinishLaunching() 函数中:

NSCursor.crosshair.set()

当应用程序加载时,我看到光标变为十字线,然后直接交换回标准指针。

很高兴听到我在这里做错了什么。

谢谢大家。

最佳答案

这不是 NSCursor 的工作方式。有一堆光标,因此任何标准(或非标准)控件都可以将自己的光标类型推到顶部并使该光标成为当前光标。所以你只需放置第一个光标,然后一些具有自己默认光标的标准 View 替换它。

由于 SwiftUI 现在不允许本地管理游标,解决方案可能是

a) 在 SwiftUI View 上设置/插入所需的光标出现/消失,或

b) 使用标准 NSHostingController 方法将光标 rect 添加到 NSView.addCursorRect View 。

更新: 来自现有项目的一些快速演示(自定义按钮解决方案的一部分)

demo

struct DemoCustomCursor: View {
    var body: some View {
        Button(action: {}) {
            Text("Cross Button")
                .padding(20)
                .background(Color.blue)
        }.buttonStyle(PlainButtonStyle())
        .onHover { inside in
            if inside {
                NSCursor.crosshair.push()
            } else {
                NSCursor.pop()
            }
        }
    }
}

关于SwiftUI 系统光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61984959/

相关文章:

Swift 4 - 如何在以编程方式使用约束后获取 UIView 的边界

c - 为什么两个指针之间有 16 个字节的差异而不是 8 个字节?

c# - 在 C# 和 Ffmpeg 之间创建管道

javascript - Div 以光标为中心

iOS:我可以检测设备屏幕是否打开/关闭吗?

ios - XCode 项目不会构建(由于未捕获的异常而终止应用程序)

c++ - c语言中**ptr是什么意思

MySQL 存储过程 : Use a variable as the database name in a cursor declaration

python - python中sqlite数据库中的游标对象是什么?

swift - 进一步限制 Swift 协议(protocol)中的通用函数