SCNView不注册UITapGestureRecognizer的水龙头

时间:2020-05-12 20:34:24

标签: swift xcode scenekit arkit

我已经在我的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)
    }
}

0 个答案:

没有答案