*当前*正在触摸哪个 SwiftUI 节点?
Posted
技术标签:
【中文标题】*当前*正在触摸哪个 SwiftUI 节点?【英文标题】:Which SwiftUI node is *currently* being touched? 【发布时间】:2020-05-09 20:07:34 【问题描述】:TLDR;如果用户在多个节点上拖动手指,如何获取他们在拖动时触摸的所有节点?
我正在尝试构建一个类似 Wordsearch 的游戏,以在 ios 上自学 SwiftUI。
我已经构建了一个如图所示的图块网格(忽略蓝色图块,因为它们与我的问题无关)。
我希望用户在网格上拖动他们的手指,并且对于他们滑过的每个图块,我会在我的模型上调用一个方法来将该图块标记为“已选择”。
我已经在每个图块的视图上尝试了 DragGesture,就像这样;
.gesture(
DragGesture()
.onChanged _ in
myModel.SelectTile(self.tile.id);
)
但是,当用户的手指从起始图块移出并进入下一个图块时,直到用户抬起手指并在该图块上开始新手势时,下一个节点的拖动手势才会生效。
SwiftUI 可以实现这种行为吗?我意识到我可以使用 SpriteKit 更轻松地做到这一点,但这对于这种“游戏”来说似乎有点过头了。
【问题讨论】:
【参考方案1】:我找到了另一种方法来完成我所需要的;
通过将 DragGesture 应用于网格本身;我可以在网格中获取触摸位置。
因此,一些简单的划分和地板给了我在网格中被触摸的瓷砖的位置,就像这样;
.gesture(
DragGesture(minimumDistance: 0)
.onChanged _gesture in
let tileSize = geometry.size.width / CGFloat(self.game.grid.width);
let x : Int = Int(_gesture.location.x / tileSize);
let y : Int = Int(_gesture.location.y / tileSize);
self.game.SelectTile(_x: x, _y: y);
)
【讨论】:
以上是关于*当前*正在触摸哪个 SwiftUI 节点?的主要内容,如果未能解决你的问题,请参考以下文章