iOS:派生出一个圆圈的点的angular度

我有一个UIImageView显示一个圆分成六个相等的三angular形对应于:

  • area1在0-60度之间
  • area2在60-120度之间
  • 区域3在120-180度之间
  • 面积在180-240度之间
  • 面积在240-300度之间
  • 面积在300-360度之间

这个圈子和下面的相似(请原谅我的坏图):

在这里输入图像说明

我想从触摸点的哪个区域得到点击。 例如,如果用户点击圆圈的右上angular,则区域应该是区域2:“> 60-120”。

我得到的input数据是:

  • 包含圆的框架的宽度和高度(例如200像素宽,200像素高)
  • 分接点坐标

有关如何根据上述input数据推断抽头点落在哪个区域的任何build议?

我只是注意到在这个解决scheme中我在评论中提到的一些错误,但它通常是你所需要的…

我build议获取你的点击点和你的圈子框架的中心之间的angular度,然后实现一个getArea函数来获取圈内的特定区域,例如:

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint tapPoint = [touch locationInView:self.view]; CGFloat angle = [self angleToPoint:tapPoint]; int area = [self sectionForAngle:angle]; } - (float)angleToPoint:(CGPoint)tapPoint { int x = self.circle.center.x; int y = self.circle.center.y; float dx = tapPoint.x - x; float dy = tapPoint.y - y; CGFloat radians = atan2(dy,dx); // in radians CGFloat degrees = radians * 180 / M_PI; // in degrees if (degrees < 0) return fabsf(degrees); else return 360 - degrees; } - (int)sectionForAngle:(float)angle { if (angle >= 0 && angle < 60) { return 1; } else if (angle >= 60 && angle < 120) { return 2; } else if (angle >= 120 && angle < 180) { return 3; } else if (angle >= 180 && angle < 240) { return 4; } else if (angle >= 240 && angle < 300) { return 5; } else { return 6; } } 
  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { let touch = touches.first let tapPoint = touch?.location(in: self) let distance = distanceWithCenter(center: circleCenter,SCCenter: tapPoint!) if distance <= radius { let angle = angleToPoint(tapPoint: tapPoint!) print(angle) } func angleToPoint(tapPoint:CGPoint) -> CGFloat{ let dx = circleCenter.x - tapPoint.x let dy = circleCenter.y - tapPoint.y let radians = atan2(dy, dx) + π // Angel in radian let degree = radians * (180 / π) // Angel in degree print("angle is off = \(degree)") return degree } 

你现在得到了angular度检查它属于哪个部分。你可以通过比较弄清楚。如果你遇到任何问题,请让我知道。