2016-04-24 4 views
1

私はswiftを使ってXCodeでSpriteKitゲームを作っています。メニューにカスタムボタンを作成したいのですが、それにはthis tutorialに従っています。 touchesMoved関数以外はすべて正常に機能しています。Swift 2のTouchesMovedの使用

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 
var touch: UITouch = touches.allObjects[0] as UITouch 
var location: CGPoint = touch.locationInNode(self) 

if defaultButton.containsPoint(location) { 
    activeButton.hidden = false 
    defaultButton.hidden = true 
} else { 
    activeButton.hidden = true 
    defaultButton.hidden = false 
} 
} 

どうやら、「touches.allObjectsは、[0] UITouchとして」スウィフト私は選択肢を検索した2にもう動作しませんが、私が動作する任意のを発見していません。そのコード行をどのように置き換えることができますか?

答えて

-1

それを行うための正しい方法はこれです:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     for touch: AnyObject in touches { 

      let location = touch.locationInNode(self) 

      if defaultButton.containsPoint(location) { 
       activeButton.hidden = false 
       defaultButton.hidden = true 
      } else { 
       activeButton.hidden = true 
       defaultButton.hidden = false 
      } 
     } 
    } 
1

何らかの理由で、チュートリアルでSet<UITouch>touchesMovedに入れずにNSSetを使用しています。チュートリアルをObjective-CからSwiftに翻訳して、それらを更新していないのだろうか?

func touchesMoved(_ touches: Set<UITouch>, 
     withEvent event: UIEvent?) 

touchesMoved - Apple docs

お知らせタッチ引数には、あなたのコード内でタイプNSSetのものであり、アップルのドキュメントはSet<UITouch>としてそれを持っています。

あなたはSet<UITouch>に切り替えると、それがnilすることができた場合には注意が必要touches.first as! UITouch

を使用してみてください、私は、iOS上でのユーザ入力機能に慣れていませんよ。

マルチタッチを後で許可する場合は、最初の唯一のUITouch要素を取得するのではなく、セット全体を確認する必要があります。

+0

これがダウン票を得た理由はわからない、ただ男は答えを変える手助けするコメントしませんでした。 Swiftの以前のバージョンではNSSetが使用されていましたが、Swiftはますます進化しています.NextStepクラスのような古い技術を使用することは少なくなりますので、チュートリアルを使用する際には、あなたはチュートリアルのそれに匹敵する速さを持っています。 – Knight0fDragon

+0

これを行うと、以前より多くのエラーが発生します。 – Gabe12

関連する問題