我试图让用户能够将 skspritenode 拖动到 UIImageView 和 UIButton 上,但是每当我创建场景时,它就会出现在 UI 元素的后面。我该如何解决?
3 回答
恐怕这是不可能的。所有精灵和任何其他元素都在 SKScene 节点上逐帧渲染,不能“拖动”或放置在其他任何地方。这些不是 UIKit 元素。
在这种情况下,您的视图充当 SKScene,因此所有精灵都被渲染到上面。
SKView 本身就是一个 UIView/NSView。所有 Sprite Kit 节点(场景也是一个节点)都是 SKView 的组成部分并包含在其中。您只能更改视图的绘制顺序,但不能更改其内容。
举个例子:你试图做的相当于试图将 UIImageView 放在 UIButton 的背景之上,但在 UIButton 的标签之下。
虽然从技术上讲,您可以通过一些技巧来为普通的 UIView 元素实现这一点,但对于 Sprite Kit 节点来说,这永远不会起作用。它们一开始不是视图,而是绘制到由 SKView 表示/管理的 OpenGL 帧缓冲区上。从 Cocoa 的角度来看,SKView 是一个没有子视图的单一视图。
简单地说:节点不是视图,节点在技术上与视图不兼容。
UIImageView 及其 UIButton 以及您想要的任何其他内容必须位于低于您拥有 Sprite Kit 内容的 SKView 的 UIView 中。
而且你需要确保 SKView 是透明的(至少是它的背景),并且如果你有时需要它们,它会通过触摸传递到下面的 UIView。