计算 UIView 中圆上 Subview 的中心坐标(倒坐标系)

Posted

技术标签:

【中文标题】计算 UIView 中圆上 Subview 的中心坐标(倒坐标系)【英文标题】:Calculate center coordinate of Subview on a circle in a UIView (inverted coordinate system) 【发布时间】:2014-05-12 23:24:28 【问题描述】:

我想将 UIButton/UIView(红点)的中心定位在一个假想圆的边界上作为另一个 UIView 的子视图——这意味着坐标系是倒置的。

如何计算圆上红框中心的 CGPoint。这就是我所拥有的……

(CGPoint) circleCenter x,y (float) circleRadius r (float) 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];

...和当前结果:

我实际上希望绿色按钮位于粉红色圆圈的顶部。所以还不完全到那里。

价值观:

弧度 10.995574 弧度 12.042772

【问题讨论】:

你知道一般如何计算中心的x和y吗?是否只是 UIView y 坐标的倒置让您失望?发布您迄今为止为解决此问题所做的工作。 是的,如前所述,我有圆心坐标、半径和角度。我缺少的是考虑倒坐标系的圆数学部分。 但是我问你是否知道如何在忽略倒置坐标系的情况下进行数学计算?如果这样做,请发布您迄今为止尝试过的内容。向您展示要解决的问题会容易得多。 一个圆的弧度为 2pi。为什么你的价值观这么大?结果看起来是镜像的。尝试减去 X 并添加 Y,而不是相反。 【参考方案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);

如果您有角度单位,则需要将其转换为弧度。

【讨论】:

非常感谢。我很感激。我试过了。仍然没有按预期工作。查看我的更新结果。你的 buttonCenter 也应该是一个 CGPoint。

以上是关于计算 UIView 中圆上 Subview 的中心坐标(倒坐标系)的主要内容,如果未能解决你的问题,请参考以下文章

给定一条射线和多边形,计算多边形内最大的圆,其中中心位于射线上,端点位于圆上

UIView 中的自动替换子视图

不更新 subView 的 UIView?

将 UIView 作为 SubView 添加到自定义类、UIView 的子类、Swift

冯·米塞斯分布

将 Subview 传递给子类 UIView