我正在尝试在 Catalyst 应用程序的 SwiftUI 中缩放和平移图像。\xc2\xa0没有 PanGesture,但 ScrollView 似乎在 iPad 和 Mac 上都能正常工作。\xc2\xa0 我只是无法滚动放大图像周围。\xc2\xa0\xc2\xa0
\nstruct TestScrollView: View {\n @State var scale: CGFloat = 1.0\n \n var body: some View {\n VStack {\n ScrollView([.horizontal,.vertical], showsIndicators: false) {\n Image("image")\n .resizable()\n }\n .gesture(MagnificationGesture()\n .onChanged({ (scale) in\n self.scale = scale\n }))\n .scaleEffect(self.scale)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n并使用以下代码...
\nScrollView([.horizontal,.vertical], showsIndicators: false) {\n Image("large_image")\n .resizable()\n .gesture(MagnificationGesture()\n .onChanged({ (scale) in\n self.scale = scale\n }))\n .scaleEffect(self.scale)\n}\nRun Code Online (Sandbox Code Playgroud)\n...我明白了:
\n\n它似乎向右滚动了很多,并且在左侧被切断。
\n我在 SwiftUI 中遇到了与下面相同的问题。
我想我可以通过给出两个手指的中心坐标anchor参数来解决这个问题。scaleEffect但我不知道如何到达中心。
我的代码:
import SwiftUI
struct MagnificationGestureView: View {
@State var scale: CGFloat = 1.0
@State var lastScaleValue: CGFloat = 1.0
var body: some View {
Image(
systemName: "photo"
)
.resizable()
.frame(
width: 100,
height: 100
)
.scaleEffect(
self.scale
//, anchor: <---- give: the two fingers center position
)
.gesture(
magnification
)
}
var magnification: some Gesture {
// Can I get the center of the pinch?
MagnificationGesture().onChanged { val in
let delta …Run Code Online (Sandbox Code Playgroud) 我想允许用户在 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 中图像的双指缩放行为?
提前致谢!
我一直在寻找一段简短的、可重用的代码,它允许在 SwiftUI 中缩放和拖动任何视图,并且还可以独立更改比例。
使用 Swift 5.5、Xcode 13.0、iOS 15.0.1、
由于 Apple 在 SwiftUI 的 ScrollViews 方面做得还不够好(还?),所以我必须实现自己的可缩放 ScrollView。请参阅下面的代码。
我让它在 iOS13 和 iOS14 上成功运行 - 但现在更新到iOS 15.0.1我不得不意识到它不再工作了!
错误信息如下:
objc[10882]: Cannot form weak reference to instance (0x1078d5540) of class _TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_5ImageVS_18_AspectRatioLayout__. It is possible that this object was over-released, or is in the process of deallocation.
Run Code Online (Sandbox Code Playgroud)
dyld4 config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
(lldb)
Run Code Online (Sandbox Code Playgroud)
我将所有内容都放在 SwiftUIPager 中,并且在滑动时问题发生在最后一页。但是,我不认为这是寻呼机的错误,因为我可以用普通的 ImageView 替换 ZoomableScrollView 并且一切正常。因此我认为苹果在他们的 UIViewRepresentable 中搞砸了一些东西。但也许你可以告诉我更多?
这是我的 ZoomableScrollView 的完整代码:
import SwiftUI
struct ZoomableScrollView<Content: View>: UIViewRepresentable {
@Binding var didZoom: Bool …Run Code Online (Sandbox Code Playgroud)