SwiftUI - 更改光标

Jes*_*sen 5 macos swiftui

编辑:正如@Asperi 提到的,这是正确的。我需要使用视图/控件,而不是形状

当我将鼠标悬停在元素上时,我试图将光标更改为指针。我看了这个,但它对我不起作用 SwiftUI System Cursor

这是我的代码

struct CursorTestView: View {
    @State private var hover: Bool = false
    
    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 5)
                .fill(hover ? Color.green : Color.blue)
                .frame(width: 100, height: 50)
                .onHover(perform: { hovering in
                    self.hover = hovering
                    if (hover) {
                        NSCursor.pointingHand.push()
                    } else {
                        NSCursor.pop()
                    }
                })
        }
        .frame(width: 400, height: 400, alignment: .center)
        .background(Color.yellow.opacity(0.2))
    }
}
Run Code Online (Sandbox Code Playgroud)

对我所缺少的有什么建议吗?

谢谢

Raj*_*han 7

我注意到视图渲染了 2 次,因此使用主队列。

struct CursorTestView: View {
    
    @State private var hover: Bool = false
    
    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 5)
                .fill(hover ? Color.green : Color.blue)
                .frame(width: 100, height: 50)
                .onHover { isHovered in
                    self.hover = isHovered
                    DispatchQueue.main.async { //<-- Here
                        if (self.hover) {
                            NSCursor.pointingHand.push()
                        } else {
                            NSCursor.pop()
                        }
                    }
                }
        }
        .frame(width: 400, height: 400, alignment: .center)
        .background(Color.yellow.opacity(0.2))
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不更新悬停变量,它也将起作用。

在此输入图像描述