2014-05-12 2 views
0

다른 UIView의 Subview로 가상 원의 테두리에 UIButton/UIView (빨간색 점)의 중심을 배치하고 싶습니다. 좌표계가 거꾸로 된 것을 의미합니다.UIView (반전 좌표계)에서 원의 Subview 중심 좌표 계산

enter image description here

어떻게 원에 빨간색 상자 센터의 CGPoint를 계산 않습니다. 여기에 ... 내가 가진 무엇

  • (CGPoint) circleCenter의 X,
  • (플로트) circleRadius는 r에 y를
  • (플로트) angleAsRadian ⍺
  • 여기

내가 (감사를 시도하고 무엇 @rmaddy)

CGFloat buttonX = circleCenter.x + cos(angleAsRadian) * radius; 
CGFloat buttonY = circleCenter.y - sin(angleAsRadian) * radius; 

CGPoint buttonCenter = CGPointMake(buttonX, buttonY); 

UIButton* buttonMarker = [[UIButton alloc]initWithFrame:CGRectMake(0,0, 20, 20)]; 
[buttonMarker addTarget:self action:@selector(showTitle:) forControlEvents:UIControlEventTouchUpInside]; 
[buttonMarker setBackgroundColor:[UIColor greenColor]]; 
[buttonMarker setCenter:buttonCenter]; 
[_view addSubview:buttonMarker]; 

... 현재 결과 :

,

enter image description here

실제로 녹색 버튼이 분홍색 원 위에 위치 할 것으로 예상됩니다. 아직 거기에 있지 않습니다.

값 :

  • 라디안 10.995574
  • 라디안 12.042772
+0

일반적으로 센터의 x와 y를 계산하는 방법을 알고 있습니까? 'UIView' y 좌표의 반전이 당신을 던지고있는 것입니까? 이것을 해결하기 위해 지금까지 한 일을 게시하십시오. – rmaddy

+0

예, 언급 한 바와 같이 저는 원 중심 좌표, 반경 및 각도를가집니다. 내가 놓친 것은 역 좌표계를 고려한 원의 수학 부분이다. – Bernd

+0

그러나 역 좌표계를 무시하고 수학을 수행하는 방법을 알고 있는지 묻는 중입니다. 그럴 경우 지금까지 시도한 것을 게시하십시오. 고칠 것이 무엇인지를 보여주는 것이 훨씬 쉬울 것입니다. – rmaddy

답변

1

가져 오기 <math.h> 및 수행이도에 각도가있는 경우

CGPoint circle = ... // the center of the circle 
CGFloat angle = ... // the angle in radians 
CGFloat radius = ...// the radius 

CGFloat buttonX = circle.x + cos(angle) * radius; 
CGFloat buttonY = circle.y - sin(angle) * radius; 

CGPoint buttonCenter = CGPointMake(buttonX, buttonY); 

은 당신이 그것을 변환해야 라디안.

+0

고마워요. 감사합니다. 나는 그것을 시도했다. 아직 예상대로 잘 작동하지 않습니다. 내 업데이트 된 결과보기 또한 buttonCenter는 CGPoint 여야합니다. – Bernd