将UIView放在Circle Objective-C中

我怎样才能让我的颜色select器( UIView )留在一个300像素300像素的色轮? 我使用UIPanGestureRecognizer拖动颜色select器围绕色轮UIImageView

色轮的直径是300px。

这是我的UIViewController的形象:

在这里输入图像说明

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

在这里输入图像说明

那么我怎么能让我的UIViewhover在色轮上呢?

你的帮助表示赞赏。

这看起来更像是一个math问题。 如果你只是想阻止子视图离开这个圆圈,那么你需要在移动代码的任何地方插入一些逻辑。

首先find圈子的中间部分。 假设圆视图是一个剪辑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 } 

如果你想让视图在你离开圆圈的任何地方停止移动,然后捕捉到你再次进入的位置,那么你可以在这里停下来。 如果你想在手指的方向上移动,即使它在视图之外,那么我build议形成一个vector并乘以300。

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

这会给你在最接近触摸点的圆的边缘的位置。

从中心计算毕达哥拉斯距离,并停止指标被拖拽得比所需的半径更远。 你甚至可以预先计算一次半径的平方,并与之相比较,以避免做平方根。

(距离平方=三angular洲x平方+三angular洲y平方)