2016-06-17 7 views
0

2つのCGPointの間に線を描こうとしています。 View Hierarchyサブビュー内の2つのCGPointの間の線 - ネストされたサブビューのフレームを特定できません

ビュー階層にネストされたサブビューのフレームを特定できません。 -

let framev1 = self.view.convertRect(subview.frame, fromView: self.containerView) 

ビュー階層内に深くネストされたサブビューの正確な座標を取得するにはどうすればよいですか?

2するCGPointの間に線を描画するために、私はこの機能を使用しています:

func drawLineFromPoint(start : CGPoint, toPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) { 

    //design the path 
    let path = UIBezierPath() 
    path.moveToPoint(start) 
    path.addLineToPoint(end) 

    //design path in layer 
    let shapeLayer = CAShapeLayer() 
    shapeLayer.path = path.CGPath 
    shapeLayer.strokeColor = lineColor.CGColor 
    shapeLayer.lineWidth = 2.0 

    view.layer.addSublayer(shapeLayer) 
} 

//どのように私のために線を描画するには、上記の関数を呼び出すために私の意図。 明らかにこれは動作していない、それはあなたの第一の問題についてはUIViewController.view

func viewDidLoad() { 
    super.viewDidLoad() 

    drawLineFromPoint(CGPointMake(subview1.frame.minX,subview1.frame.midY), toPoint:CGPointMake(subview2.frame.maxX,subview2.frame.midY), ofColor: UIColor.redColor().colorWithAlphaComponent(1), inView: self.view)     
} 
+0

図面をどのビューで表示していますか、そのビューをその座標系に変換していないのはなぜですか? – Wain

+0

Subviewの途中を通る線を描きたい。 (赤い円と画像内の線) – Statik

+0

@Statik:もっと具体的なコードを共有してください。 – amorbytes

答えて

0

の(0,0)にラインaを描画し、この機能を使用するようにしてください:

func convertRectCorrectly(rect: CGRect, toView view: UIView) -> CGRect { 
    if UIScreen.mainScreen().scale == 1 { 
     return self.convertRect(rect, toView: view) 
    } 
    else if self == view { 
     return rect 
    } 
    else { 
     var rectInParent = self.convertRect(rect, toView: self.superview) 
     rectInParent.origin.x /= UIScreen.mainScreen().scale 
     rectInParent.origin.y /= UIScreen.mainScreen().scale 
     let superViewRect = self.superview!.convertRectCorrectly(self.superview!.frame, toView: view) 
     rectInParent.origin.x += superViewRect.origin.x 
     rectInParent.origin.y += superViewRect.origin.y 
     return rectInParent 
    } 
} 

例:

let framev1 = self.view.convertRectCorrectly(subview.frame, toView: self.containerView) 

親コンテナビューでサブビュー座標を返す必要があります。

関連する問題