使touchsBegan方法适用于特定的视图/图像

时间:2018-10-29 01:31:52

标签: ios swift object touch touchesbegan

我一直在Google上搜索此内容,但找不到答案。

我想在特定的视图上使用TouchesBegan,所以当我在另一个视图上按某些东西时,它不会启动游戏。 (我想为我的游戏创建多个关卡,但是,我不想遍历spritkit)概括地说,我想在一个视图上具有TouchesBegan函数,但在另一视图上不存在/有什么办法吗?通过声明关闭TouchesBegan?

预先感谢您的回答,否则示例代码将非常有用:)

最好, 参孙S。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // First touch to start the game
    if gameState == .ready {
        startGame()

    }


    audioPlayerNine.play()
    audioPlayerTwo.stop()
    clockLabel.isHidden = false
    bestTimeLabel.isHidden = false
    startText.isHidden = true
    bgImageTwo.isHidden = true
    bgImage.isHidden = false
    rText.isHidden = true
    fText.isHidden = true
    iText.isHidden = true
    bgImageThree.isHidden = true
    periodText.isHidden = true
    audioPlayerFour.stop()
    restartText.isHidden = true
    audioPlayerFive.stop()
    audioPlayerFive.currentTime = 0
    lineImage.isHidden = false
    lineImageTwo.isHidden = false
    periodTextTwo.isHidden = false
    self.rTextTwo.isHidden = false
    self.iTextTwo.isHidden = false
    self.fTextTwo.isHidden = false
    levelLabel.isHidden = false
    audioPlayerSeven.play()
    audioPlayerSeven.volume = 0.3
    audioPlayerSix.stop()
    audioPlayerTen.play()
    audioPlayerTen.volume = 0.2
    audioPlayerNine.volume = 1.5
    eText.isHidden = true
    eTextTwo.isHidden = false
    bgImageMenu.isHidden = true
    resumeButton.isHidden = true
    restartButton.isHidden = true
    mainMenuButton.isHidden = true
    muteButton.isHidden = true
    unMuteButton.isHidden = true
    menuLine.isHidden = true
    menuLineTwo.isHidden = true
    bestTimeLabel.isHidden = true
    imagewhite.isHidden = false
    imagewhiteTwo.isHidden = false
    menuButton.isHidden = false
    bestLabel.isHidden = true





    if let touchLocation = event?.allTouches?.first?.location(in: view) {
        // Move the player to the new position
        movePlayer(to: touchLocation)

        // Move all enemies to the new position to trace the player
        moveEnemies(to: touchLocation)
    }
}

1 个答案:

答案 0 :(得分:0)

touchesBegan()是NSResponder定义的方法,应用程序中的每个UIView都是NSResponder。这意味着在您的代码中,touchesBegan()方法已经适用于特定视图。如果您查看该类,则上面的代码是其中的一部分,就像UIView或viewController一样,此touchesBegan()方法会在该视图内的任何位置接收触摸。

在具有不同视图的程序中,您可以具有不同的touchesBegan()方法,一个用于每个视图(或一个用于每个具有重要触摸动作的视图)。这些方法可以完成不同的任务-一种可以启动游戏,一种可以在游戏中移动碎片,等等。

通常,touchesBegan()对于要跟踪用户在视图中拖动位置和方式的情况(和视图)很有用。如果您只对触摸屏幕显示的某个元素以触发一个动作(例如开始游戏)感兴趣,那么UIButton(一种特定类型的视图)通常比实现自己的触摸更方便处理程序。 Here's a very simple tutorial到Swift和iOS中的UIButton。在您的情况下,可以在state时设置按钮的gameState == .ready(可单击或禁用),而按钮的action(单击按钮时会发生)可以称为startGame()