2011-07-10 31 views
4

私はこのような何かしたい:(光部品、背景を無視する)Core Graphics - Macを使用して三角形を描く方法は?

example triangle

どのように私はココアを使用して、これを描くことができますか? drawRect:に?私は描く方法を知らない。

+2

をオーバーライド次のいずれかまたは両方を読んでください:http://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/ http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaDrawingGuide/ –

答えて

20

使用NSBezierPath

- (void)drawRect:(NSRect)rect 
{ 
    NSBezierPath *path = [NSBezierPath bezierPath]; 
    [path moveToPoint:NSMakePoint(0, 0)]; 
    [path lineToPoint:NSMakePoint(50, 100)]; 
    [path lineToPoint:NSMakePoint(100, 0)]; 
    [path closePath]; 
    [[NSColor redColor] set]; 
    [path fill]; 
} 

これはあなたが始める必要があり、それは100×100サイズのビューの赤い三角形を描画します。もちろん、ハードコーディングされた値を使用する代わりに、ビューのサイズに基づいて座標を動的に計算します。

+0

私は思ったよりずっと簡単です。ありがとう! – Names

+0

ハ!ロゴのカメを思い出させる。 – Timo

+0

[UIColor redColor] setFill]とCGPointMakeは違いますか? NSMakePointとCGPointMakeの違いはありますか? – futurevilla216

3

のiOS +スウィフト

(1)スウィフト拡張を作成

// Centered, equilateral triangle 
extension UIBezierPath { 
    convenience init(equilateralSide: CGFloat, center: CGPoint) { 
     self.init() 
     let altitude = CGFloat(sqrt(3.0)/2.0 * equilateralSide) 
     let heightToCenter = altitude/3 
     moveToPoint(CGPoint(x:center.x, y:center.y - heightToCenter*2)) 
     addLineToPoint(CGPoint(x:center.x + equilateralSide/2, y:center.y + heightToCenter)) 
     addLineToPoint(CGPoint(x:center.x - equilateralSide/2, y:center.y + heightToCenter)) 
     closePath() 
    } 
} 

(2)あなたは「描画する方法がわからない」場合は、あなたがすべきのdrawRect

override func drawRect(rect: CGRect) { 
    let path = UIBezierPath(
     equilateralSide: self.bounds.size.width, 
     center: CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2)) 

    self.tintColor.set() 
    path!.fill() 
} 
関連する問題