2017-07-22 6 views
2

UIViewSKNodeに変換したいのですが、convert(_:to/from:)メソッドでビュー/レイヤーを変換する方法と同様です。UIViewsとSKNodes間のポイントを変換する方法

これを行う正しい方法は何ですか?

このように使用
extension SKNode { 

    /// Find point in node relative to it's containing SKView 
    /// so that it can be further converted relative to other views. 
    func pointInContainingView(_ point:CGPoint) -> (SKView, CGPoint)? { 

     guard let scene = scene, let view = scene.view else { 
      return nil 
     } 
     // Invert Y to match view coordinate system. 
     let invertedY = CGPoint(x: point.x, y: -point.y) 

     // Get the point in it's containing scene. 
     let pointInScene = convert(invertedY, from: scene) 

     // Get the resulting point in the containing SKView 
     let pointInView = view.convert(pointInScene, from: scene) 

     return (view, pointInView) 
    } 
} 

:ここ

答えて

3

は私が思いついたものです

// view/node 

let origin = node.frame.origin 

if let (nodeView, point) = node.parent?.pointInContainingView(origin) { 
    let converted = nodeView.convert(point, from:view) 
} 
0

あなたがあるノードを変換する必要がある場合は、あなたがやらなければならないことは、scene.convertPoint(toView:pointOnScene)

ですシーンの子ではなくシーンの子孫であれば、次のようになります。

let absolutePosition = node.convert(node.position,toNode:node.scene) 
scene.convertPoint(toView: absolutePosition) 

使用するにはちょっとした拡張:

extension SKNode { 

    /// Find point in node relative to it's containing SKView 
    /// so that it can be further converted relative to other views. 
    func pointInContainingView(_ point:CGPoint) -> (SKView, CGPoint)? { 

     guard let scene = scene, let view = scene.view else { 
      return nil 
     } 
     let pointInView.convertPoint(toView: convert(point,toNode:scene)) 
     return (view, pointInView) 
    } 
} 
関連する問題