【发布时间】:2021-10-27 01:19:15
【问题描述】:
我正在使用 UIKit 和 SpriteKit 在 Swift 中制作游戏原型。库存(在此屏幕截图的底部)是 UIView 和 UIImageView 各个项目的子视图。在这个例子中,一个橡子。
我让橡子识别“平移”手势,所以我可以拖动它。但是,它会将其呈现在层次结构中的其他视图之下。我希望它从库存中弹出并位于所有内容之上(甚至在其父视图之上),这样我就可以将它放到游戏中其他地方的其他视图中。
这就是我在橡子视图上的panHandler:
@objc func panHandler(gesture: UIPanGestureRecognizer){
switch (gesture.state) {
case .began:
removeFromSuperview()
controller.view.addSubview(self)
case .changed:
let translation = gesture.translation(in: controller.view)
if let v = gesture.view {
v.center = CGPoint(x: v.center.x + translation.x, y: v.center.y + translation.y)
}
gesture.setTranslation(CGPoint.zero, in: controller.view)
default:
return
}
}
问题出在.began 的情况下,当我将它从超级视图中删除时,平移手势立即取消。是否可以从超级视图中删除视图并将其作为子视图添加到其他地方,同时保持平移手势?
或者,如果我的方法完全错误,您能否指点我如何使用另一种方法来实现我的目标?
【问题讨论】:
-
使用
UITouch?使用 Sprite Kit 开发游戏时,应尽可能与 UIKit 类保持距离。我什至远离Timer。 -
@ElTomato 你是说我不应该将库存实现为 UIViews,而是在游戏场景本身中实现它?
-
Sí,先生。这是一个糟糕的 Sprite Kit 游戏设计。
-
嗯,这可以解释为什么我如此挣扎。 :) 感谢您的提示!
-
如果您确实想使用 UIView 并拖动一些东西,而不是自己用平移手势跟踪拖动,您应该使用允许您设置预览的内置拖放机制拖动图像:-) 参见例如Adopting Drag and Drop in a Custom View