我试图暂时禁用整个屏幕上的触摸,尽管屏幕上有很多精灵和touchesBegun。
我想,显然是错误的,关闭场景的触摸会这样做:
scene?.isUserInteractionEnabled = false
但这没有用,所以我尝试了这个,但也没有用:
view?.scene?.isUserInteractionEnabled = false
这也没用,所以我也尝试了这个,也来自场景内部:
self.isUserInteractionEnabled = false
答案 0 :(得分:3)
没有全局方法可以关闭触摸,绘图队列顶部的任何内容都是第一个响应者。
您需要遍历场景中的所有节点并将其关闭:
enumerateChildNodesWithName("//*", usingBlock:
{ (node, stop) -> Void in
node.isUserInteractionEnabled = false
})
现在问题是重新开启,如果你使用这种方法,你会为所有东西打开它,所以你可能想要为所有可触摸的精灵采用命名约定
enumerateChildNodesWithName("//touchable", usingBlock:
{ (node, stop) -> Void in
node.isUserInteractionEnabled = true
})
这将查找名称以touchable开头的任何节点。
此方法涉及递归,因此如果您有大量节点,则可能会很慢。相反,你应该使用另一种方法:
let disableTouchNode = SKSpriteNode(color:SKColor(red:0.0,green:0.0,blue:0.0,alpha:0.1),size:self.size)
disableTouchNode.isUserinteractionEnabled = true
disableTouchNode.zPosition = 99999
self.addChild(disableTouchNode)
这样做是在场景大小的所有元素之上的几乎透明的节点上拍击。这样,当用户触摸屏幕时,该节点将吸收它而不是其他任何东西。
答案 1 :(得分:1)
以下将禁用所有触摸
self.view?.isUserInteractionEnabled = false