2017-08-04 29 views
1

有人可以解释在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) 

为什么会在单一视图按钮在游戏中的应用程序有什么不同?此外,何时(和如果)这是创建,我将如何修改触摸结束的方法来知道什么时候按钮被触摸?

+0

请描述:*“不起作用” * ...没有按钮没有被添加到风景?它是否被添加,但不是你想要的地方?当你点击它时没有任何反应? (你错过了'addTarget'代码,如果是这样的话)。 – DonMag

+0

它没有被添加到视图 –

+0

你的代码在哪里尝试这个?在你的GameViewController的'viewDidLoad()'? – DonMag

回答

0

您的代码正在将按钮添加到.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 
    } 
+0

只是一个问题...当我用按钮切换到场景时,应用程序崩溃的错误:线程1:EXC_BAD_INSTRUCTION(code = EXC_1386 .......它编译好但崩溃,并在控制台中(11db)我多次搜索这个错误,但是我找不到适用于此的情况...有什么想法? –

+0

我得看到很多**更多信息。我创建了一个新的项目使用“游戏”模板,并将你的代码添加到'didMove(查看:SKView)',并且运行良好。没有更多信息,就没有办法猜测你的应用程序可能会发生什么。 – DonMag

+0

我应该发布我的文件吗? –

0

还有另一种通过编程方式创建按钮的方法。您可以创建一个空的UIView并覆盖触摸方法。您也可以在此视图上处理触摸事件并模拟按钮操作。我认为这对你来说是最快捷的方式。

+0

你知道我的代码会有什么问题吗? –

相关问题