SwiftUI无法平移图像

问题描述 投票:1回答:1

我无法找到与SwiftUI中的平移手势相同的功能。我看到了并使用放大,点击,拖动和旋转-但我看不到任何内置平移。在里面以下代码段我添加了图片并允许用户缩放-但我想要用户还可以移动缩放的图像以聚焦在感兴趣的区域上。拖曳的当然不能完成任务-它只是移动框架。

我尝试在顶部放置一个框架并移动底部图像,但无法做到这一点也可以。

 struct ContentView: View {

    @State var scale: CGFloat = 1.0
    @State var isScaled: Bool = false
    @State private var dragOffset = CGSize.zero

    var body: some View {
        GeometryReader { geo in
            VStack {
                ZStack{
                    RoundedRectangle(cornerRadius: 40)
                        .foregroundColor(Color.white)
                        .frame(width: geo.size.width - 45, height: geo.size.width - 45)
                        .shadow(radius: 10)

                    Image("HuckALaHuckMedium")
                        .resizable()
                        .scaleEffect(self.scale)
                        .frame(width: geo.size.width - 60, height: geo.size.width - 60)
                        .cornerRadius(40)
                        .aspectRatio(contentMode: .fill)
                        .shadow(radius: 10, x: 20, y: 20)

                        //need pan not drag
                        .gesture(
                            DragGesture()
                                .onChanged { self.dragOffset = $0.translation }
                                .onEnded { _ in self.dragOffset = .zero }
                        )
                        //this works but you can't "zoom twice"
                        .gesture(MagnificationGesture()
                            .onChanged { value in
                                self.scale = self.isScaled ? 1.0 : value.magnitude
                        }
                        .onEnded({ value in
                            //self.scale = 1.0
                            self.isScaled.toggle()
                        })
                        )
                        .animation(.easeInOut)
                        .offset(self.dragOffset)
                }//zstack
                Spacer()
            }
        }
    }
}

原始图像示例:

enter image description here

以及缩放后的图像-但拖动不平移:

enter image description here

任何指导将不胜感激。 Xcode 11.3(11C29)

ios swiftui gesture
1个回答
0
投票

对于其他人。这真的很简单。确保在允许拖动之前完成放大-它会像平底锅一样工作。首先定义拖动手势:

    let dragGesture = DragGesture()
        .onChanged { (value) in
            self.translation = value.translation
        }
        .onEnded { (value) in
            self.viewState.width += value.translation.width
            self.viewState.height += value.translation.height
            self.translation = .zero
        }

然后创建一个@State值,在激活放大手势后将其切换为true。当您将手势附加到图像上时,请有条件地这样做:

 .gesture(self.canBeDragged ? dragGesture : nil)
© www.soinside.com 2019 - 2024. All rights reserved.