SwiftUI 如何检测到用户将鼠标悬停在视图上?

SwiftUI 中,任何连接了鼠标的 macOS 应用程序或任何 iPadOS 应用程序都可以检测到用户何时将其鼠标悬停在视图上,并做出适当的响应。

您将要使用两个修饰符:onHover()hoverEffect()。 这些中的第一个允许您跟踪指针当前是否悬停在视图上方,并传递一个反映该状态的布尔值。 例如,根据指针是否悬停在文本上方,这将使某些文本变为红色或绿色:

struct ContentView: View {
    @State private var overText = false

    var body: some View {
        Text("Hello, World!")
            .foregroundColor(overText ? .green : .red)
            .onHover { over in
                overText = over
            }
    }
}

hoverEffect() 修饰符允许您选择以下三种方式之一:系统在发生悬停时突出显示视图:.highlight 将指针转换为视图形状,同时创建柔和的方向效果,.lift 将指针转换为形状 同时放大视图并在其后放置柔和阴影,.automatic 会选择它认为最合适的突出显示效果。

请注意,如果仅应用不带任何参数的 hoverEffect() 修饰符,则 .automatic 是默认设置,但它不仅仅是在 .highlight.lift 之间进行选择-这是完全不同的效果,并且不会转换指针以匹配 您的视图的形状。

要尝试一下,下面的一些代码在屏幕上放置了可轻敲的文本标签,使其具有 .lift 悬停效果,以使其清晰可辨:

struct ContentView: View {
    var body: some View {
        Text("Tap me!")
            .font(.largeTitle)
            .hoverEffect(.lift)
            .onTapGesture {
                print("Text tapped")
            }
    }
}

提示:要在 iPadOS 模拟器上进行尝试,请转到 I/O 菜单,然后选择 Input > Send Cursor to Device