3

如何让我的颜色选择器 ( UIView) 留在 300px 300px 的色轮内?我使用 UIPanGestureRecognizer来围绕色轮拖动颜色选择器UIImageView

色轮的直径为 300px。

这是我的图像UIViewController

在此处输入图像描述

问题是它可以被拖到轮子外的任何地方:

在此处输入图像描述

那么我怎样才能让我的UIView那个悬停在圆圈内的色轮上呢?

感谢您的帮助。

4

2 回答 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;

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

于 2013-10-12T16:09:45.407 回答
2

计算距中心的毕达哥拉斯距离,并阻止指示器被拖动到超出所需半径的任何位置。您甚至可以预先计算一次半径的平方,并与之进行比较,以避免产生平方根。

(距离平方 = delta x 平方 + delta y 平方)

于 2013-10-12T15:55:45.990 回答