我已经在我的SCNView中添加了UITapGestureRecognizer,但是点击手势不会注册事件。 SCNView位于UIView中,并调用添加UITapGestureRecognizer的方法。
我想做的是更改场景的颜色,以测试SCNView是否已检测到敲击。我知道SCNView正在正确呈现。水龙头似乎是唯一的问题。
当我尝试将水龙头添加到UIViewController时,我的代码始终崩溃了。
除水龙头外,其他所有功能均可用。这正在Swift Playgroundbook中运行。代码会编译,除了敲击识别之外的所有内容都是可检测的。这是代码:
class GameSceneController: SCNView
{
public func setupInfo()
{
self.backgroundColor = UIColor.black
//self.userInteractionEnabled = YES;
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapGestureDetected))
tapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGesture)
}
@objc func tapGestureDetected()
{
handleTap()
//self.scene = SCNScene()
}
func handleTap()
{
self.backgroundColor = UIColor.blue
}
}
var openOceanScene: GameSceneController!
class ViewController: UIViewController
{
var inappropriateSizeView: UIView!
var initialized = false
var currentWidth = 10000
var inappropriateSizeImageView: UIImageView!
override func loadView()
{
let view = UIView()
view.backgroundColor = UIColor.white
inappropriateSizeView = UIView()
inappropriateSizeView.backgroundColor = UIColor.black
inappropriateSizeImageView = UIImageView()
inappropriateSizeImageView.backgroundColor = UIColor.white
inappropriateSizeView.addSubview(inappropriateSizeImageView)
//inappropriateSizeView.userInteractionEnabled = NO
//inappropriateSizeImageView.userInteractionEnabled = NO
initialized = true
openOceanScene = GameSceneController()
view.addSubview(openOceanScene)
view.addSubview(inappropriateSizeView)
self.view = view
}
override func viewDidLoad()
{
super.viewDidLoad()
}
override func viewDidLayoutSubviews()
{
if initialized == true
{
if(Int(self.view.frame.width) > currentWidth)
{
inappropriateSizeView.isHidden = false // intentionally set to be false both times
}
else if(Int(self.view.frame.width) < currentWidth)
{
inappropriateSizeView.isHidden = false
}
inappropriateSizeView.frame = self.view.frame
}
openOceanScene.frame = self.view.frame
inappropriateSizeImageView.frame = CGRect(x: 15, y: Int(self.view.frame.height/2) - 12, width: 24, height: 24)
currentWidth = Int(self.view.frame.width)
}
}