2016-12-02 8 views
0

私はUIViewサブクラスを持っています。コアグラフィックスで同じストロークの異なる線を取得する

let path = UIBezierPath() 
path.lineWidth = 1 
path.move(to: CGPoint(x: rect.minX, y: rect.minY+1)) 
path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY+1)) 
UIColor.lightGray.setStroke() 
path.stroke() 
path.close() 

しかし、行がビューのレンダリング時に異なるように表示されます。ここでは

は、私はdrawメソッドをオーバーライドする方法です。 特に、

view.frame.heightがsuperview.frame.height未満である: view < superview

view.frame.heightがsuperview.frame.heightよりも大きい場合: view > superview

缶私が間違っていることを理解していない。

答えて

1

あなたのコードがの描画(_ rect:CGRect)であると仮定すると、rectは異なることに注意してください。 path.Moveの両方のパス.AddLineコールはこれを参照しています。あなたはどのようにスーパービューに物事を位置づけていますか?オートレイアウトまたはフレーム?

+0

はい、あなたの前提は正しいです。私のコードは描画されています(_ rect:CGRect)。私のビューは次のように配置されています - > UIViewController.viewにはUITableView.tableViewHeader = UIView - >これには、AutoLayoutで配置されたUIViewサブクラスが含まれています。 – Anon

+0

それで、それぞれが違うときはいつもベジェパスの最上位**実際の** rect Y値は何ですか? view.frame.heightがスーパービューにどのように固定されているかによって、コード化されたものが表示されることがあります。また、問題はどういったものですか?あなたは、それが垂直方向に "x"だけ離れているということを除いて、同じ行をしていますか? – dfd

+0

どちらの場合も同じrectが得られます:(0.0、0.0、406.0、441.666666666667)。 UIViewSubclassはUITableView.tableViewHeaderのビューの左上と右端に固定されていますが、下端はバインドされていません。問題は、線の太さです。 1つは他のものよりも厚く見えますが、どちらも同じ線幅(1)を持つ必要があります。 – Anon

関連する問題