2017-05-18 17 views
1

私の目標は、SpriteKitラベルノード内でUITouchが発生したかどうかを調べることです。ビューはSKViewです。私が使用しているコード(下記)の問題は、タッチと四角形が異なる座標系にあるように見えることです。UITouchがSKLabelNodeフレーム内にあるかどうかを確認する

これを修正するために単純な数式を使用できますが、この問題を解決する簡単な方法はありますか?それとも、私はこれをやっていなければならない別の方法がありますか?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    for t in touches { 
     let position = t.location(in: view) 

     //if inside startButton 
     if (startButton?.frame.contains(position))! { 
      debugPrint("yes") 
     } 
    } 
} 
+0

'startButton'は、タッチを受け取るビューに直接含まれていますか? –

答えて

2

私はあなたがシーン内のtouchesBeganをオーバーライドしているされていることを前提としています。その場合は、let position = t.location(in: self)を使用してください。つまり、viewselfに置き換えてください。シーンを保持するビュー内の位置ではなく、シーン自体の位置を取得します。

希望に役立ちます!

+0

これは正しい答えです... – Whirlwind

+0

私は 'view'と' self'がこのケースでは同じであると思っていましたが、明らかに私は誤解しました。この特定のケースで 'view'と' self'の違いは何ですか? – Taylor

+0

デフォルトでは、シーンの原点(この場合は 'self')は左下隅ですが、' view'は原点が左上隅にあります。したがって、ポジションの正のyは、シーンコーディネートを使用して「画面上に行く」ことを意味します。 'position'の値と同じy値は、ビュー座標を使って「画面を下ろす」ことを意味します。 – JohnV