关闭整个屏幕的触摸,SpriteKit,怎么样?

时间:2016-11-16 18:40:49

标签: swift sprite-kit touch skscene disabled-input

我试图暂时禁用整个屏幕上的触摸,尽管屏幕上有很多精灵和touchesBegun。

我想,显然是错误的,关闭场景的触摸会这样做:

    scene?.isUserInteractionEnabled = false

但这没有用,所以我尝试了这个,但也没有用:

    view?.scene?.isUserInteractionEnabled = false

这也没用,所以我也尝试了这个,也来自场景内部:

    self.isUserInteractionEnabled = false

2 个答案:

答案 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