ios - 使 touchesBegan 方法适用于特定视图/图像
问题描述
我一直在谷歌上搜索这个但找不到答案。
我想在特定视图上使用 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)
}
}
解决方案
touchesBegan() 是 NSResponder 定义的一个方法,你应用中的每个 UIView 都是一个 NSResponder。这意味着您的代码中的 touchesBegan() 方法已经适用于特定视图。如果你看一下上面的代码是它的一部分,它就像一个 UIView 或 viewController,这个 touchesBegan() 方法在该视图内的任何地方接收触摸。
在具有不同视图的程序中,您可以有不同的 touchesBegan() 方法,一个用于每个视图(或一个用于每个具有显着触摸动作的视图)。这些方法可以完成不同的事情——一种可以开始游戏,一种可以移动游戏中的棋子,等等。
通常,touchesBegan() 对于您想要跟踪用户在视图中拖动的位置和方式的情况(和视图)很有用。如果您只关心屏幕显示的某个元素是否已被触摸以触发单个动作(例如开始游戏),那么 UIButton(一种特定类型的视图)通常比实现自己的触摸更方便处理程序。 这是一个非常简单的 Swift 和 iOS 中的 UIButtons教程。在您的情况下,按钮state
(无论是可点击还是禁用)可以设置 when gameState == .ready
)和按钮action
(点击按钮时会发生什么)可以调用startGame()
.