将UIView保持在圆形内 Objective-C

3
如何让我的颜色选择器 (UIView) 在直径为300px的彩色圆盘内保持?我使用 UIPanGestureRecognizer 来拖动颜色选择器在彩色圆盘 UIImageView 上移动。

这是我的 UIViewController 的图片:

enter image description here

问题是它可以被拖到圆盘外面的任何地方:

enter image description here

那么,如何保持我的悬停在彩色圆盘上的 UIView 仅在圆圈内呢?

感谢您的帮助。


你尝试过什么吗?你的解决方案出了什么问题? - Wain
1
你已经知道圆的中心和半径。在2D中,两点之间的(欧几里得)距离是相当基础的数学概念。还有什么阻止你前进呢? - David Rönnqvist
2个回答

3
这似乎更像是一个数学问题。如果您只想防止子视图离开圆形,则需要在移动代码的任何位置插入一些逻辑。
首先找到圆形的中心。假设圆形视图是一个被裁剪的UIView,通过取中心视图来找到它。
CGPoint center;
center.x = view.frame.origin.x + view.frame.size.width/2;
center.y = view.frame.origin.y + view.frame.size.height/2;

那么,您需要计算触摸点与圆心之间的距离。
CGPoint touch = //location of the touch point
CGFloat distance = sqrt( pow(touch.x-center.x,2)+pow(touch.y-center.y,2) )

如果距离小于300,则按照正常方式移动子视图。
if (distance < 300) {
    //do your thing
}

如果您希望视图停留在您离开圆圈的位置,并在再次进入时快速跳转到该位置,则可以在此处停止。如果您希望在手指移动到视图之外时仍然沿着手指方向移动,则建议形成一个向量并将其乘以300。

CGPoint newPosition;
newPosition.x = touch.x / distance * 300;
newPosition.y = touch.y / distance * 300;

这将为您提供最接近触摸点的圆边缘位置。

2

计算距离中心的勾股距离,并阻止指示器被拖动超出所需半径。您甚至可以预先计算一次半径的平方,并与之比较,以避免进行平方根运算。

(距离的平方 = Δx的平方 + Δy的平方)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接