onTapGesture修改器第二次在swiftui中起作用

时间:2020-07-25 22:01:26

标签: swift macos swiftui

我写了一个用于快速打开Xcode项目的工具

我的第一次点击时,我的onTapGesture修改器不起作用。它第二次按预期工作,依此类推。可能是我的应用程序窗口未激活吗?

源代码: https://github.com/DKalachniuk/XcodeProjects 文件ProjectIcon.swift

struct ProjectIcon: View {
    let project: Project
    @EnvironmentObject var preferences: Preferences

    var body: some View {
        ZStack {
            Rectangle()
                .foregroundColor(Color.clear)
                .background(Color(self.project.color.color))
                .cornerRadius(8)

            Text(String(self.project.name.first ?? "-").capitalized)
                .font(.system(size: 14, weight: Font.Weight.semibold))
                .padding(EdgeInsets(top: 0, leading: 4, bottom: 0, trailing: 4))
                .foregroundColor(Color.white)
        }
        .frame(width: 24, height: 24)
        .onTapGesture {
            let newColor = CodableColorPicker.shared.pickRandomColor()
            self.preferences.changeProjectsColor(self.project, newColor: newColor)
        }
    }
}

更新:关于此错误的有趣观察。如果我在窗口的某处单击,然后单击项目图标,那么它将立即生效

1 个答案:

答案 0 :(得分:0)

添加以下内容(已通过Xcode 12 / macOS 10.15.5测试)

.frame(width: 24, height: 24)
.contentShape(RoundedRectangle(cornerRadius: 8))     // << here !!
.onTapGesture {

注意:顺便说一句,pickRandomColor()的检查逻辑它没有考虑存储在首选项中的颜色,以防万一。