2012-04-25 98 views
0

當用戶輸入點擊指定頂點時,我繪製了一組連接線。我建立一個CGMutablePathRef如何在CGContext CGMutablePathRef上繪製頂點?

- (void)addPointToCGMPR: (CGPoint)p 
     forNewPolygon: (BOOL)newPoly 
{ 
    if (newPoly) 
    { 
     CGPathMoveToPoint(cgmpr, NULL, p.x, p.y); 
    } 
    else 
    { 
     CGPathAddLineToPoint(cgmpr, NULL, p.x, p.y); 
    } 
    [self setNeedsDisplay]; 
} 

的drawRect:然後每個點後調用輸入,並在上下文CGMutablePathRef添加到CGContext上顯示

- (void)drawRect:(CGRect)rect 
{  
    // Set up a context to display 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextAddPath(context, cgmpr); 

    CGContextSetLineWidth(context, 1); 
    CGContextStrokePath(context); 

    // If NOT empty then Close the context so that box comparison can occur later 
    if (!CGContextIsPathEmpty(context)) 
    { 
     CGContextClosePath(context); 
    } 
} 

我的屏幕爲一個在得到線會期待。我的麻煩是,用戶選擇第一個點後,屏幕上沒有任何渲染,並且用戶不知道系統是否有第一個選擇,直到輸入第二個點。我希望系統在輸入下一個點之前提供第一個點。我還希望系統渲染以視覺上不同的方式拾取的每個頂點 - 現在我不能獲取頂點渲染,只有線。有沒有辦法讓CGContext提供點數?有沒有辦法指定這些點呈現的樣式?謝謝。

回答

1

你可以自由繪製任何你想要表示的點:一個小方塊,一個小圓圈,一個圖釘圖像等等。你已經知道如何繪製上下文;只是循環你的觀點,然後畫出他們,然而你希望他們出現。我個人傾向於使用CGContextFillEllipseInRect這樣的東西。對於每個點,製作一個圍繞點並繪製的矩形:

CGFloat pointSize = 4; 
CGRect pointRect = CGRectMake(point.x - pointSize/2, point.y - pointSize/2, pointSize, pointSize); 
CGContextFillEllipseInRect(context, pointRect); 
1

不需要。您需要自己渲染它們,方法是添加另一個CGPath來描述您想要表示頂點的任何內容。既然你可能會經常畫這些,你可能想把它渲染到CGLayer,這樣你就可以很容易地將它複製到你需要的地方。您還可以將頂點繪製到CALayers上,以便輕鬆移動它們。但是設計和管理繪圖的這一部分取決於你。

+0

感謝您指點我在這些方向,羅布。我需要移動這些點,所以只有這些名字將幫助我找到能夠教會我如何設計和管理這部分程序的文檔。 +1 – StoneBreaker 2012-04-26 15:22:07