2012-05-09 61 views
0

我目前正在製作一個應用程序,它將一些特定的標誌網絡繪製到屏幕上(在CGContextRef上)。到目前爲止一切都很順利,但現在我發現自己在我無法解決這個問題的情況下:iOS:在畫布上動態繪圖(上下文)

我想動態地繪製一個對象只知道它的行(有開始和終點的x和y座標)。有了這些我發現線的中間,這是符號應繪製的地方。有了這些信息,我找到了線的角度(頂部爲0)。這是信息,我現在所擁有的:

CGPoint firstLocation; 
CGPoint secondLocation; 
CGPoint middleLocation; 

double x1 = firstLocation.x; 
double y1 = firstLocation.y; 
double x2 = middleLocation.x; 
double y2 = middleLocation.y; 

float a = (atan2(y2-y1, x2-x1) * (180/M_PI)) - 90; 

我看着使用一些變換上的CGRect功能(如CGAffineTransform),但這似乎工作並不如我需要圍繞它的中心旋轉矩形和一個CGRect只會圍繞它的原點旋轉。

我想創建上述信息下列符號:

Image

任何幫助表示讚賞,如果您需要任何更多信息,請告訴我!

回答

1

在我的應用程序中,我做了類似的事情。我有一條路徑可以在繪製之前添加一個轉換。變換轉變的路徑中點,旋轉它,並轉移回:

// Rotate the path such that it points to the end coordinate 
CGAffineTransform t = CGAffineTransformTranslate(
    CGAffineTransformRotate(
    CGAffineTransformMakeTranslation(middleLocation.x, middleLocation.y), 
    -a), 
    -middleLocation.x, -middleLocation.y); 
CGMutablePathRef path = CGPathCreateMutable(); 
CGPoint points[8] = { ... these are the 8 points in my path ... }; 
CGPathAddLines(path, &t, points, 8); 

您不必使用CGPathAddLines,那只是對我來說,構建路徑的最簡單方法。所有的CGPathAdd...函數都可以進行轉換。

如果您不使用CGPath,您可以通過執行CGContextTranslateCTMCGContextRotateCTM在上下文中進行類似的轉換。

+0

這條線是固定的,我只需要旋轉中間的符號(即G即可)來匹配線條所具有的角度。而且我無法旋轉整個上下文,因爲許多其他事情將在上下文中繪製。 – Manuel

+0

您可以在繪製G之前立即翻譯/旋轉背景,然後立即翻譯/旋轉。 – kevboh

+0

哦,那真的有用嗎?如果我從x = 0,y = 0到x = 100,y = 100繪製一條線,那麼它會使用上下文的座標,從而使轉換無用? – Manuel