2011-07-14 38 views
26

我有一個三角形求解器,我想要一種方法來使用從答案中得到的值在與之匹配的屏幕上繪製三角形。如何以編程方式繪製三角形

+0

通過「三角解算器」我認爲你的意思是你告訴它一個三角形的兩邊,它計算出第三個?這是一個直角三角形嗎? – Schwern

+0

有點,我有一個方法讓用戶輸入關於任何三角形的任何信息組合。如兩面和一角,三面,兩角和一面。所有正確的三角形也是。 – user804306

回答

80

如果你繼承一個UIView可以實現這樣的事情在drawRect中繪製一個三角形:

-(void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    CGContextBeginPath(ctx); 
    CGContextMoveToPoint (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect)); // top left 
    CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMidY(rect)); // mid right 
    CGContextAddLineToPoint(ctx, CGRectGetMinX(rect), CGRectGetMaxY(rect)); // bottom left 
    CGContextClosePath(ctx); 

    CGContextSetRGBFillColor(ctx, 1, 1, 0, 1); 
    CGContextFillPath(ctx); 
} 
+0

對於如何做到這一點我仍然有點困惑。對不起,我對編程還很陌生。 – user804306

+1

創建一個Objective-C類,它是UIView的子類。在類中實現drawRect:方法,當視圖需要在屏幕上繪製時,iOS將調用drawRect:。實例化該類的對象並將其添加到視圖控制器的視圖中。如果這沒有意義,那麼也許你應該從[這個問題]中獲得一些基礎知識(http://stackoverflow.com/questions/3315577/good-iphone-programming-books)。 – progrmr

+0

好吧我理解添加的Objective-c類,但當用戶按下按鈕將自定義三角形繪製到屏幕時,我會調用什麼? – user804306

-1
- (void)drawRect:(CGRect)rect { 


    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextClearRect(ctx, rect); 

    // Draw a triangle 
    CGContextSetRGBFillColor(ctx, 255, 160, 122, 1); 

    CGContextBeginPath(ctx); 
    CGContextMoveToPoint (ctx, 290, 35); // top 
    CGContextAddLineToPoint(ctx, 350, 165); // right 
    CGContextAddLineToPoint(ctx, 230,165); // left 
    CGContextClosePath(ctx); 

    CGContextSetRGBFillColor(ctx, 1, 1, 1, 1); 
    CGContextFillPath(ctx); 
} 
+0

是)))@FelixSFD –

+0

此答案如何爲問題添加任何新值?它看起來只是程序員的硬編碼值。而且它只是純粹的代碼,沒有單一的解釋。 –

+0

對不起,我是初學者,只是想表現出我繪製三角形的方式。是的,這是我的一個項目的代碼。可能會對其他人有所幫助...... –

0

斯威夫特3相當於爲progrmr的回答是:

override func draw(_ rect: CGRect) { 

    guard let context = UIGraphicsGetCurrentContext() else { return } 

    context.beginPath() 
    context.move(to: CGPoint(x: rect.minX, y: rect.minY)) 
    context.addLine(to: CGPoint(x: rect.maxX, y: rect.midY)) 
    context.addLine(to: CGPoint(x: (rect.minX), y: rect.maxY)) 
    context.closePath() 

    context.setFillColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) 
    context.fillPath() 
}