将UIView放在Circle Objective-C中
我怎样才能让我的颜色select器( UIView
)留在一个300像素300像素的色轮? 我使用UIPanGestureRecognizer
拖动颜色select器围绕色轮UIImageView
。
色轮的直径是300px。
这是我的UIViewController
的形象:
问题是它可以拖到车轮以外的任何地方:
那么我怎么能让我的UIView
hover在色轮上呢?
你的帮助表示赞赏。
这看起来更像是一个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平方)