2016-05-02 5 views
0

UIBezierパスの内部をどのように色付けできますか?私は単純な三角形を作っていて、三角形の内部を赤色で色付けしたいと思っています。SwiftでUIBezierPathを登録する

class GraphView : UIView { 

    override func drawRect(rect: CGRect) { 

     UIColor.redColor().setFill() 
     UIColor.greenColor().setStroke() 

     let path = UIBezierPath(rect: rect) 
     path.moveToPoint(CGPointMake(100,620)) 
     path.addLineToPoint(CGPointMake(300,100)) 
     path.addLineToPoint(CGPointMake(500,620)) 
     path.addLineToPoint(CGPointMake(100,620)) 

     path.closePath() 

     path.fill() 
     path.stroke() 

    } 

} 


let graphView = GraphView(frame: CGRectMake(0,0,960,640)) 
XCPlaygroundPage.currentPage.liveView = graphView 

上記のコードは、遊び場で書かれている:ここでの結果である:

enter image description here

+0

申し訳ございません。コードと新しいスクリーンショットで質問を更新しました。 –

答えて

1

問題は、あなたのUIBezierPathを作成している方法です。ビューの境界の四角形で作成し、その四角形の内側に三角形を追加します。したがって、それらは両方とも満たされており、ビュー全体が赤色になります。

あなたはtrueusesEvenOddFillRuleを設定した場合、あなたはより良いあなたのパス内の不要な長方形の結果が表示されます:

enter image description here

あなただけのこの行置き換える三角形を記入したい場合:

をこれで
let path = UIBezierPath(rect: rect) 

let path = UIBezierPath() 

これにより、新しいが空になります。UIBezierPathに三角形を追加することができます。

+0

ありがとう!バグの1つは、最後の行:path.addLineToPoint(CGPointMake(100,620))を省略しても、三角形を作成するということです。三角形を完成させるために最終行を必要としないか? –

+1

@johndoe 'path.closePath()'は、パスの最後のポイントをパスの最初のポイント(直線)と結びつけることによって三角形を作成します。したがって、最後のラインは実際には冗長です。また、 'path.fill()'が[暗黙的にパスを閉じる]ことに注意してください(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIBezierPath_class/#//apple_ref/occ/instm/UIBezierPath /塗りつぶし)。 – Hamish

関連する問題