2017-08-04 30 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

你知道我的代碼會有什麼問題嗎? –

相關問題