UIView の座標系と SpriteKit の座標系を変換する

SpriteKit の scene の座標系は、原点 (0, 0) が左下です。UIView の座標系は Mac でおなじみの右上になります。なぜこのような違いが出るのかというと、これは想像ですが、SpriteKit は重力の概念があり、0 は ground の方が都合がよく、計算のコストを低くできるってことなんだろうと思います。

SKScene に CALayer を追加しようとすると、SKNode は左下が原点、CALayer の path は左上が原点ということになり、オブジェクトを表示しようとするときに少し困ります。要は、Y 座標が変換できればそれでよいので、view の高さを測って座標返還するのかな、あーメンドクセーと思っていたら、こんなメソッドを発見。

 - (CGPoint) convertPointFromView:(CGPoint) point

使い方が少しわかんなかったんですが、こんな感じで OK.

some_object.position = [self convertPointFromView: some_object.position];

便利なメソッドがあるものです。