2012-05-09 6 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 같은) 변환 함수를 사용하여 보았다, 그러나 이것은 내가 그것을 센터의 주위에 RECT를 회전해야하므로 제대로 작동하지 않습니다이 내가 지금 가지고있는 정보입니다 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

관련 문제