ios - SwiftUI——当 iPad 底座被拉起时检测 DragGesture 取消

标签 ios swiftui

这是一个非常简单的例子来展示我尝试做的事情。红色圆圈可以拖动,松开后会回到原来的位置,如第一张图所示。当在拖动过程中拉起 iPad Dock 然后 DragGesture 的 .onEnded 时会出现问题。永远不会被调用并且红色圆圈被卡住,如第二张图片所示。我不明白为什么.onEnded不叫。我在这里缺少什么?

我通过重置 offset 想到了一个解决方法在 SceneDelegate 的 sceneDidBecomeActive ,但如果 iPad 底座只是被拉起但不会导致应用程序变为非事件状态,即进入后台模式,则它不起作用。在这种情况下,不会调用 SceneDelegate 中的任何函数,我发现无法检测到 DragGesture 已被中断。任何可能的解决方案?

struct ContentView: View {
  @State private var offset = CGSize.zero

  var body: some View {
    ZStack {
      Rectangle()
        .fill(Color.clear)
        .frame(width: 100, height: 100)
        .border(Color.black, width: 5)

      Circle()
        .fill(Color.red)
        .frame(width: 90, height: 90)
        .offset(offset)
        .gesture(
          DragGesture()
            .onChanged() { self.offset = $0.translation }
            .onEnded() { _ in self.offset = CGSize.zero })
    }
  }
}

Image 1

Image 2

最佳答案

试试 GestureState如下。默认情况下,它是临时的,并在结束时根据设计重置为初始值。

struct ContentView: View {
  @GestureState private var offset = CGSize.zero

  var body: some View {
    ZStack {
      Rectangle()
        .fill(Color.clear)
        .frame(width: 100, height: 100)
        .border(Color.black, width: 5)

      Circle()
        .fill(Color.red)
        .frame(width: 90, height: 90)
        .offset(offset)
        .gesture(
          DragGesture()
            .updating($offset) { (value, gestureState, transaction) in
                gestureState = CGSize(width: value.location.x - value.startLocation.x, height: value.location.y - value.startLocation.y)
            })
    }
  }
}

关于ios - SwiftUI——当 iPad 底座被拉起时检测 DragGesture 取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253490/

相关文章:

ios - 从字符串中删除换行符

iOS 框架和重复库

ios - SwiftUI ScrollView 中的 GeometryReader 导致奇怪的行为和随机偏移

SwiftUI 预览 : Cannot preview in this file/failed to launch

swift - 文本字段之间的空间 SwiftUI

ios - Objective-C 继承重复代码问题

java - JmDNS 与 iOS Bonjour 的互操作性

ios - iOS 中的用户对象位置 (swift)

list - 将带标题的部分添加到具有可扩展行的 SwiftUI 列表

ios - SF Symbols 在 iOS 15 WidgetKit 中失去了颜色