SwiftUI 手势状态在手势之间重置

标签 swiftui gesture

我有一个简单正方形的以下代码,我将一个 MagnificationGesture 附加到该正方形上,以通过捏合缩放手势更新其状态。

import SwiftUI

struct ContentView2: View {
    
    var scale: CGFloat = 1
    
    var magnificationGesture: some Gesture {
        MagnificationGesture()
            .onChanged { value in
                scale = value
            }
    }
    
    var body: some View {
        VStack {
            Text("\(scale)")
            Spacer()
            Rectangle()
                .fill(Color.red)
                .scaleEffect(self.scale)
                .gesture(
                    magnificationGesture
                )
            Spacer()
        }
    }
}

struct ContentView2_Previews: PreviewProvider {
    static var previews: some View {
        ContentView2()
    }
}

但是这个简单的 View 表现得很奇怪。当我执行手势时,scale @State 属性已成功修改。但是,当我用手做另一个手势时,scale 属性将重置为其初始状态,而不是从其当前值开始。

这是一段视频,讲述了所发生的事情。例如,当红色 View 非常小时,执行手势时,我希望它保持很小,而不是完全重置。

如何获得所需的行为 - 即 scale 属性未重置

enter image description here

最佳答案

我可以通过在代码中添加一些内容来使其工作。检查一下并告诉我这是否适合您的用例:

  import SwiftUI

struct ContentView2: View {
    var magGesture = MagnificationGesture()
    @State var magScale: CGFloat = 1
    @State var progressingScale: CGFloat = 1
    
    var magnificationGesture: some Gesture {
        magGesture
            .onChanged { progressingScale = $0 }
            .onEnded {
                magScale *= $0
                progressingScale = 1
            }
    }
    
    var body: some View {
        VStack {
            Text("\(magScale)")
            Spacer()
            Rectangle()
                .fill(Color.red)
                .scaleEffect(self.magScale * progressingScale)
            
                .gesture(
                    magnificationGesture
                )
            Spacer()
        }
    }
}

struct ContentView2_Previews: PreviewProvider {
    static var previews: some View {
        ContentView2()
    }
}

关于SwiftUI 手势状态在手势之间重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73847265/

相关文章:

SwiftUI View 阻止对 MapKit 的触摸,但不会阻止其他 View

string - 使文本编辑器动态高度 SwiftUI

ios - LazyVGrid 单元格 subview 对于单元格内的特定文本不断消失

html - winjs Canvas 中的单个图像手势控制

html5-canvas - 如何在fabricjs中增加移​​动设备上的触摸区域控制点(而不是增加控制点的显示尺寸)?

ios - SwiftUI : Picker does not update correctly when changing datasource

swift - 在 SwiftUI 中更改文本编辑器的背景颜色

android检测用户是否滑动

c# - 如何在 kinect 中实现挥手手势?

ios - UIScrollView 无法识别 ShakeGesture