如何让我的颜色选择器 ( UIView
) 留在 300px 300px 的色轮内?我使用 UIPanGestureRecognizer
来围绕色轮拖动颜色选择器UIImageView
。
色轮的直径为 300px。
这是我的图像UIViewController
:
问题是它可以被拖到轮子外的任何地方:
那么我怎样才能让我的UIView
那个悬停在圆圈内的色轮上呢?
感谢您的帮助。
如何让我的颜色选择器 ( UIView
) 留在 300px 300px 的色轮内?我使用 UIPanGestureRecognizer
来围绕色轮拖动颜色选择器UIImageView
。
色轮的直径为 300px。
UIViewController
:那么我怎样才能让我的UIView
那个悬停在圆圈内的色轮上呢?
感谢您的帮助。
这看起来更像是一个数学问题。如果您只想阻止子视图离开圆圈,那么您需要在执行移动代码的任何地方插入一些逻辑。
首先找到圆的中间。假设圆形视图是一个裁剪的 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;
这将为您提供最接近触摸点的圆边缘的位置。
计算距中心的毕达哥拉斯距离,并阻止指示器被拖动到超出所需半径的任何位置。您甚至可以预先计算一次半径的平方,并与之进行比较,以避免产生平方根。
(距离平方 = delta x 平方 + delta y 平方)