相关疑难解决方法(0)

如何在 SwiftUI 中放大 ScrollView

我正在尝试在 Catalyst 应用程序的 SwiftUI 中缩放和平移图像。\xc2\xa0没有 PanGesture,但 ScrollView 似乎在 iPad 和 Mac 上都能正常工作。\xc2\xa0 我只是无法滚动放大图像周围。\xc2\xa0\xc2\xa0

\n
struct 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}\n
Run Code Online (Sandbox Code Playgroud)\n

并使用以下代码...

\n
ScrollView([.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}\n
Run Code Online (Sandbox Code Playgroud)\n

...我明白了:

\n

测试视频

\n

它似乎向右滚动了很多,并且在左侧被切断。

\n

swiftui

9
推荐指数
1
解决办法
1万
查看次数

使用放大手势;如何放大用户手指实际“捏合”的位置?

我在 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)

ios swift swiftui

7
推荐指数
0
解决办法
1266
查看次数

SwiftUI:捏合以放大图像

我想允许用户在 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 中图像的双指缩放行为?

提前致谢!

ios swift swiftui

5
推荐指数
1
解决办法
2664
查看次数

有没有一种简单的方法可以在 SwiftUI 中捏合缩放和拖动任何视图?

我一直在寻找一段简短的、可重用的代码,它允许在 SwiftUI 中缩放和拖动任何视图,并且还可以独立更改比例。

uikit gesture drag pinch swiftui

1
推荐指数
1
解决办法
2081
查看次数

ZoomableScrollView 不再在 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)

scrollview uiscrollview swiftui uiviewrepresentable

0
推荐指数
1
解决办法
1063
查看次数