【问题标题】:How can I compose 3 different, simultaneous gestures in SwiftUI?如何在 SwiftUI 中同时编写 3 个不同的手势?
【发布时间】:2020-07-22 17:44:12
【问题描述】:

尝试在 SwiftUI 中同时编写 3 个手势,但 SwiftUI 的 SimultaneousGesture() 仅适用于 2 个手势。

例如,我有一个基本视图,例如:

struct myRect: View {
    var body: some View {
        Rectangle()
            .fill(Color.red)
            .frame(width: 200, height: 200)
    }
}

我需要这个视图是可拖动、可旋转和可调整大小的。

我假设我需要使用DragGesture()RotationGesture()MagnificationGesture()。但我被困住了,因为SimultaneousGesture() 最多只能接受 2 个手势。如何让这 3 个手势在我的视图上工作?

编辑:

我应该指定这些手势必须同时工作。这与此处提出的问题完全相同:Pinch, Pan, and Rotate Text Simultaneously like Snapchat [SWIFT 3]

但那是针对 UIKit 的。在 SwiftUI 中可以做到这一点吗?

【问题讨论】:

    标签: ios swiftui


    【解决方案1】:

    您的观点myRect 可能与其他观点发生冲突。 我测试了SimultaneousGesture() 修饰符,它可以通过任何顺序的三个手势(如打击)正常工作:

    struct myRect: View {
    let rg = RotationGesture().onChanged({ a in
        print("Angle = \(a.degrees)")
    })
    let dg = DragGesture(minimumDistance: 1, coordinateSpace: .local).onChanged({ v in
        print("Translate = \(v.translation.width)")
    })
    let mg = MagnificationGesture().onChanged({ s in
        print("scale = \(s)")
    })
    var body: some View {
        Rectangle()
            .fill(Color.red)
            .frame(width: 200, height: 200)
            .simultaneousGesture(rg)
            .simultaneousGesture(mg)
            .simultaneousGesture(dg)
    }
    }
    

    【讨论】:

    • 不幸的是,这些不能同时工作。通过这个实现,我将能够同时调整大小和旋转,但不能调整大小、旋转和拖动。我追求的功能与:stackoverflow.com/q/45402639/12533955
    • @user12533955,请说明您的问题,哪个手势没有输出?
    • 随着您的实现,当用户放大和旋转视图时,拖动不会给出输出。我希望让它们同时工作。所以用户可以同时放大和拖动,同时旋转和拖动,同时放大和旋转和拖动。查看我链接的 stackoverflow 帖子,他们解释了我所追求的确切功能
    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多