如何让我的颜色选择器 (UIView
) 停留在 300px 300px 的色轮内?我正在使用 UIPanGestureRecognizer
在色轮 UIImageView
周围拖动颜色选择器。
色轮的直径是300px。
这是我的 UIViewController
的图像:
问题是它可以被拖到轮子之外的任何地方:
那么如何让悬停在色轮上的 UIView
保持在圆圈内呢?
感谢您的帮助。
最佳答案
这看起来更像是一道数学题。如果您只想防止 subview 离开圆圈,那么您需要在执行移动代码的任何地方插入一些逻辑。
首先找到圆的中间。假设圆形 View 是一个剪裁的 UIView,通过获取
找到中心 ViewCGPoint 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,那么你可以正常移动 subview
if (distance < 300) {
//do your thing
}
如果您希望 View 在您离开圆圈的任何地方停止移动,然后捕捉到您再次进入圆圈的任何位置,那么您可以在此处停止。如果你想要在手指的方向上移动,即使它在 View 之外,那么我建议形成一个向量并将它乘以 300。
CGPoint newPosition;
newPosition.x = touch.x / distance * 300;
newPosition.y = touch.y / distance * 300;
这将为您提供距离触摸点最近的圆圈边缘的位置。
关于iphone - 将 UIView 保留在 Circle Objective-C 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19335937/