小编Chr*_*itt的帖子

SwiftUI:同时拖动父视图和子视图,但用单独的手指

我有一个应用程序,它有一个父视图(graphView,带有粗蓝色边框)和一个子视图(nodeView,绿色框)。每个都有自己的 SwiftUI DragGesture 处理程序。我希望能够用不同的手指移动绿色节点和蓝色边框图。

\n

目标:当我主动拖动 \xe2\x80\x9c 蓝色边框图时,将 \xe2\x80\x9cgreen 节点 \xe2\x80\x9d 保持在我的手指下。\xe2\x80\x9d

\n

问题:绿色节点 \xe2\x80\x9cghosts\xe2\x80\x9d,即似乎在位置周围反弹。

\n

笔记:

\n
    \n
  1. .simultaneousGestureon nodeView 可以让我用一根手指在节点上同时拖动图形和节点。但我想用两个单独的手指拖动图形和节点:一个在节点上,另一个在图形上。
  2. \n
  3. 某些 UI(例如.offset上的ZStack)被设置为模仿我的应用程序的实际设置。
  4. \n
\n

如果有更好的方法,我也愿意在 UIKit 中执行此操作。我怀疑目前的问题是来自图形与节点手势处理程序上的竞争“触发周期”。

\n
struct StackOverflowTestView: View {\n    @State var graphOffset: CGFloat = .zero\n    @State var graphPreviousOffset: CGFloat = .zero\n\n    @State var nodePosition: CGFloat = 200.0\n    @State var nodePreviousPosition: CGFloat = 200.0\n\n    @State var nodeIsDragged = false\n\n    @State var lastNodeTranslation: CGFloat = .zero\n\n    var …
Run Code Online (Sandbox Code Playgroud)

ipad ios swift swiftui ipados

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

UIKit 触控板:在单击 + 拖动时,检测额外的非触摸式拖动

立即目标:在触控板单击 + 拖动手势期间,检测附加(无单击)触控板拖动/平移手势并做出反应。

\n

问题:只要第一次触控板单击+拖动正在进行,UIKit 似乎就会忽略触控板上额外的、无单击的两指平移。

\n

大图 UX:\xe2\x80\x9cclick + 拖动\xe2\x80\x9d 和 \xe2\x80\x9cclick + 拖动 + 另一个平移\xe2\x80\x9d 应该有不同的行为。

\n

示例:所需的行为类似于 Figma:当抓取组件\xe2\x80\x99s 名称时,另外两个手指的平移手势将导致背景(而不是组件)四处移动。

\n

现在:

\n
    \n
  • 只需在触控板上单击并拖动即可:触发触摸 = 1 的手势
  • \n
  • 只需在触控板上平移/拖动(无点击):触发触摸 = 0 的手势
  • \n
  • 在单击 + 拖动期间,添加另一个平移/拖动:与触摸 = 1 触发相同的手势
  • \n
\n

我\xe2\x80\x99VE尝试过:

\n
    \n
  • 查看各种手势识别器的触摸和位置
  • \n
  • 查看UIGestureRecognizerDelegate\xe2\x80\x99s 委托方法,例如gestureRecognizer(_:shouldReceive:)
  • \n
  • minTouches = 1在一个触控板上 UIKit 手势识别器(即单击+拖动)和maxTouches = 0另一个(即无单击拖动)
  • \n
  • (此处未共享代码):一个可注入的 UIKit 包装器,位于整个视图上,并且还侦听触控板手势(与上面的结果相同)
  • \n
\n

代码:

\n
import SwiftUI\n\nstruct StackOverflowUIKitView: View {\n    var nodeView: …
Run Code Online (Sandbox Code Playgroud)

uikit ipad ios swift swiftui

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

标签 统计

ios ×2

ipad ×2

swift ×2

swiftui ×2

ipados ×1

uikit ×1