gpt4 book ai didi

swift - 在 SwiftUI 中是否有一种简单的方法可以通过捏合来放大图像?

转载 作者:行者123 更新时间:2023-12-02 02:40:21 25 4
gpt4 key购买 nike

我希望能够在 SwiftUI 中调整图像大小和移动图像(就像它是 map 一样),通过捏合缩放和拖动图像。

使用 UIKit,我将图像嵌入到 UIScrollView 中并由它处理,但我不知道如何在 SwiftUI 中执行此操作。我尝试使用 MagnificationGesture,但无法让它顺利工作。

我已经搜索了一段时间,有人知道是否有更简单的方法?

最佳答案

这里的其他答案对于自定义缩放逻辑来说过于复杂。如果您想要标准的、经过实战考验的 UIScrollView 缩放行为,您只需使用 UIScrollView!

SwiftUI 允许您使用 UIViewRepresentable 或 UIViewControllerRepresentable 将任何 UIView 放入其他 SwiftUI View 层次结构中。然后,要将更多 SwiftUI 内容放入该 View 中,您可以使用 UIHostingController。阅读 Interfacing with UIKit 中了解有关 SwiftUI-UIKit 互操作的更多信息和 API docs .

您可以找到一个更完整的示例,其中我在真实的应用程序中使用它:https://github.com/jtbandes/SpacePOD/blob/main/SpacePOD/ZoomableScrollView.swift (该示例还包括更多使图像居中的技巧。)

var body: some View {
ZoomableScrollView {
Image("Your image here")
}
}

struct ZoomableScrollView<Content: View>: UIViewRepresentable {
private var content: Content

init(@ViewBuilder content: () -> Content) {
self.content = content()
}

func makeUIView(context: Context) -> UIScrollView {
// set up the UIScrollView
let scrollView = UIScrollView()
scrollView.delegate = context.coordinator // for viewForZooming(in:)
scrollView.maximumZoomScale = 20
scrollView.minimumZoomScale = 1
scrollView.bouncesZoom = true

// create a UIHostingController to hold our SwiftUI content
let hostedView = context.coordinator.hostingController.view!
hostedView.translatesAutoresizingMaskIntoConstraints = true
hostedView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
hostedView.frame = scrollView.bounds
scrollView.addSubview(hostedView)

return scrollView
}

func makeCoordinator() -> Coordinator {
return Coordinator(hostingController: UIHostingController(rootView: self.content))
}

func updateUIView(_ uiView: UIScrollView, context: Context) {
// update the hosting controller's SwiftUI content
context.coordinator.hostingController.rootView = self.content
assert(context.coordinator.hostingController.view.superview == uiView)
}

// MARK: - Coordinator

class Coordinator: NSObject, UIScrollViewDelegate {
var hostingController: UIHostingController<Content>

init(hostingController: UIHostingController<Content>) {
self.hostingController = hostingController
}

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return hostingController.view
}
}
}

关于swift - 在 SwiftUI 中是否有一种简单的方法可以通过捏合来放大图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com