SwiftUI .onTapGesture 从未调用过

Posted

技术标签:

【中文标题】SwiftUI .onTapGesture 从未调用过【英文标题】:SwiftUI .onTapGesture never called 【发布时间】:2020-05-23 15:54:10 【问题描述】:

Attached 是一个简单的 SwiftUI 结构,它显示了一组“扩展按钮”。我显示顶部按钮(其他 3 个是 1x1,位于顶部按钮后面。)当用户点击顶部按钮时,它会展开为 40x40 并以漂亮的动画移动底层按钮。

我遇到的问题是没有一个底层按钮会响应它们的 .onTapGesture。我可以再次点击顶部按钮,动画会反转,但点击其他按钮时没有任何反应。

import SwiftUI

struct MapTools: View 

    @State private var isRotated = false

    var body: some View 
        ZStack 
            Image("wheel")
                .resizable()
                .frame(width: 1, height: 1)
                .foregroundColor(.mFoodColor)
                .scaleEffect(self.isRotated ? 40 : 1)
                .offset(x: self.isRotated ? -60 : 0, y: 0)
                .onTapGesture 
                    withAnimation 
                        self.isRotated.toggle()
                    
                

            Image("locationPin")
                .resizable()
                .frame(width: 1, height: 1)
                .foregroundColor(.mFoodColor)
                .scaleEffect(self.isRotated ? 40 : 1)
                .offset(x: self.isRotated ? -60 : 0, y: self.isRotated ? 60 : 0)
                .onTapGesture 
                    withAnimation 
                        self.isRotated.toggle()
                    
                

            Image("locationArrow")
                .resizable()
                .frame(width: 1, height: 1)
                .foregroundColor(.mFoodColor)
                .scaleEffect(self.isRotated ? 40 : 1)
                .offset(x: 0, y: self.isRotated ? 60 : 0)
                .onTapGesture 
                    withAnimation 
                        self.isRotated.toggle()
                    
                

            Image("mapTools")
                .resizable()
                .frame(width: 40, height: 40)
                .foregroundColor(.mFoodColor)
                .rotationEffect(self.isRotated ? .degrees(90) : .degrees(0))
                .onTapGesture 
                    withAnimation 
                        self.isRotated.toggle()
                    
                
            
        

有人知道我做错了吗?

【问题讨论】:

可能不在提供的代码中,因为它只是在预览中按原样工作。 Xcode 11.4。好的,不完全是,因为我用系统 SF 替换了您的自定义图像。 我同意。您的代码看起来正确,可能是 Apple 错误。 @Asperi,首先感谢代码清理。其次,我对您的评论的解释是否正确,因为您单独尝试了它并且它有效?这是仅在预览模式下还是已编译? 无处不在 【参考方案1】:

您必须为不同的图像使用不同的布尔值来旋转它们。 尝试为四个不同的图像声明 4 个布尔值来旋转它们

@State private var isFirstRotated = false
@State private var isSecondRotated = false
@State private var isThirdRotated = false
@State private var isFourthRotated = false

【讨论】:

感谢您的回复。不幸的是,我认为它不适用于这里,因为我没有尝试旋转其他项目,只是在主项目旋转时展开和移动它们。【参考方案2】:

发现是另一个物体的干扰。

【讨论】:

以上是关于SwiftUI .onTapGesture 从未调用过的主要内容,如果未能解决你的问题,请参考以下文章

onTapgesture 禁用 View SwiftUI 的按钮

SwiftUI 使用 onTapGesture 和 onLongPressGesture 处理按钮/视图以及释放操作

SwiftUI:带有onTapGesture的列表单元格内的菜单触发手势

SwiftUI onTapGesture 块 NavigationLink 动作

SwiftUI onTapGesture 仅调用一次

LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI