如何在iOS游戏应用swift 3中编程添加按钮?
有人可以解释在Swift 3 Xcode 8的iOS游戏应用程序中以编程方式添加按钮的代码吗?关于这个主题的所有其他线程,我们都在单一视图中,并没有为我工作。我无法弄清楚如何将按钮添加到游戏应用程序Main.storyboard,所以我试图做一个程序化添加按钮。这是代码我想现在使用,但不工作:如何在iOS游戏应用swift 3中编程添加按钮?
var playAgain = UIButton()
playAgain.setTitle("Play Again", for: .normal)
playAgain.setTitleColor(UIColor.black, for: .normal)
playAgain.backgroundColor = SKColor.green
playAgain.layer.borderWidth = 2
playAgain.layer.cornerRadius = 18
playAgain.frame = CGRect(x: (self.frame.width)/2, y: (self.frame.height)/2, width: 100, height: 36)
self.view?.addSubview(playAgain)
为什么会在单一视图按钮在游戏中的应用程序有什么不同?此外,何时(和如果)这是创建,我将如何修改触摸结束的方法来知道什么时候按钮被触摸?
您的代码正在将按钮添加到.view
,但使用的坐标系为SKScene
。所以,你的按钮在那里,只是看不到。
假设你想要的按钮在屏幕上居中(至少目前如此),改变放置到:
playAgain.frame = CGRect(x: 0, y: 0, width: 100, height: 36)
playAgain.center = (self.view?.center)!
self.view?.addSubview(playAgain)
这将使按钮上述游戏场景(Z-层就是这样),所以你可以使用普通的按钮水龙头,而不需要处理touches
。所以,之后添加按钮:
self.view?.addSubview(playAgain)
playAgain.addTarget(self, action: #selector(playAgainTapped(_:)), for: .touchUpInside)
,然后在你的类的其他地方:
func playAgainTapped(_ sender: Any?) -> Void {
print("Play again was Tapped!")
// take whatever action you want here
}
只是一个问题...当我用按钮切换到场景时,应用程序崩溃的错误:线程1:EXC_BAD_INSTRUCTION(code = EXC_1386 .......它编译好但崩溃,并在控制台中(11db)我多次搜索这个错误,但是我找不到适用于此的情况...有什么想法? –
我得看到很多**更多信息。我创建了一个新的项目使用“游戏”模板,并将你的代码添加到'didMove(查看:SKView)',并且运行良好。没有更多信息,就没有办法猜测你的应用程序可能会发生什么。 – DonMag
我应该发布我的文件吗? –
还有另一种通过编程方式创建按钮的方法。您可以创建一个空的UIView并覆盖触摸方法。您也可以在此视图上处理触摸事件并模拟按钮操作。我认为这对你来说是最快捷的方式。
你知道我的代码会有什么问题吗? –
请描述:*“不起作用” * ...没有按钮没有被添加到风景?它是否被添加,但不是你想要的地方?当你点击它时没有任何反应? (你错过了'addTarget'代码,如果是这样的话)。 – DonMag
它没有被添加到视图 –
你的代码在哪里尝试这个?在你的GameViewController的'viewDidLoad()'? – DonMag