2017-08-04 18 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) 

はなぜ単一のビューのボタンは、ゲームのアプリに違うのでしょうか?また、これが作成されている場合は、ボタンが押されたことを知るためにTouches endedメソッドをどのように変更しますか?

+0

を記載してください:... *「動作しない」*ボタンが追加されません景色?それは追加されますが、あなたがそれを望む場所ではありませんか?それをタップすると何も起こりませんか? (その場合は 'addTarget'コードがありません)。 – DonMag

+0

ビューに追加されていません –

+0

あなたのコードでは、これを試していますか?あなたのGameViewControllerの 'viewDidLoad()'では? – DonMag

答えて

0

.viewにボタンを追加していますが、座標系はSKSceneです。だから、あなたのボタンです。そこには表示されません。

に配置を変更する、(今のところ、少なくとも)ボタンが画面の中央に配置することにしたいと仮定すると:このボタンを配置します上記のゲームシーン(Z-層が

playAgain.frame = CGRect(x: 0, y: 0, width: 100, height: 36) 
    playAgain.center = (self.view?.center)! 
    self.view?.addSubview(playAgain) 

、それで)、あなたは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つの問題...ボタンでシーンに切り替えると、アプリケーションはエラーでクラッシュします。スレッド1:EXC_BAD_INSTRUCTION(コード= EXC_1386 .......)コンパイルは正常ですがクラッシュし、コンソールで私はこのエラーを数回見つけましたが、これに適用されたケースを見つけることができませんでした...どんなアイデアですか? –

+0

私は**ロット**の詳細情報を参照する必要があります。プロジェクトに「ゲーム」テンプレートを使用し、コードをdidMove(表示する:SKView)に追加しても問題ありません。詳細情報がなければ、アプリで何が起こっているのかを推測する方法はありません。 – DonMag

+0

ファイルを投稿する必要がありますか? –

0

ボタンをプログラムで作成する別の方法があります。空のUIViewを作成し、タッチメソッドをオーバーライドすることができます。また、このビューでタッチイベントを処理し、ボタンアクションをシミュレートすることもできます。私はこれがあなたにとって最速の方法だと思います。

+0

私のコードで何が間違っているか知っていますか? –

関連する問題