我想允许用户在 SwiftUI 中捏合放大图像。我想最好的方法是使用 a MagnificationGesture
,然后按照这里的答案,我最终得到了这个代码:
// outside of `var body: some View`
@State private var scale: Int = 1.0
@State private var lastScale: Int = 1.0
// Image
Image("dog")
.resizable()
.aspectRatio(contentMode: .fit)
.gesture(MagnificationGesture()
.onChanged { val in
let delta = val / self.lastScale
self.lastScale = val
let newScale = self.scale * delta
self.scale = newScale
}
.onEnded { _ in
self.lastScale = 1.0
}
)
.scaleEffect(scale)
Run Code Online (Sandbox Code Playgroud)
此代码可以很好地处理放大,但不允许用户放大特定区域。相反,它总是放大图像的中间。
我将如何处理 SwiftUI 中图像的双指缩放行为?
提前致谢!
小智 2
我发现最简单的实现方法是使用Apple提供的PDFKit。
1.首先创建PDFView
import SwiftUI
import PDFKit
struct PhotoDetailView: UIViewRepresentable {
let image: UIImage
func makeUIView(context: Context) -> PDFView {
let view = PDFView()
view.document = PDFDocument()
guard let page = PDFPage(image: image) else { return view }
view.document?.insert(page, at: 0)
view.autoScales = true
view.backgroundColor = .clear
return view
}
func updateUIView(_ uiView: PDFView, context: Context) {
}
}
Run Code Online (Sandbox Code Playgroud)
2.在swiftUI视图中使用,像这样
TabView(selection: $index,
content: {
//this line
PhotoDetailView(image: images[index])
.offset(imageViewerOffset)
})
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .always))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2664 次 |
最近记录: |