iphone - 将 UIView 保留在 Circle Objective-C 中

标签 iphone ios objective-c uiview cgrect

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

色轮的直径是300px。

这是我的 UIViewController 的图像:

enter image description here

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

enter image description here

那么如何让悬停在色轮上的 UIView 保持在圆圈内呢?

感谢您的帮助。

最佳答案

这看起来更像是一道数学题。如果您只想防止 subview 离开圆圈,那么您需要在执行移动代码的任何地方插入一些逻辑。

首先找到圆的中间。假设圆形 View 是一个剪裁的 UIView,通过获取

找到中心 View
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,那么你可以正常移动 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/

相关文章:

ios - 如何将 "Open In"按钮添加到 iOS 8 共享扩展?

ios - 我想使用 Storyboard在同一 View 中添加 waitview

iphone - NSMutableArray 自动类型转换为 NSArray

ios - 尽管滚动 UICollectionView indexPathForItemAtPoint 返回相同的项目

ios - 核心图形和数组

ios - 查看选择了哪些对象的神奇命令

ios - 替换 Collection View 单元格的标签

iPhone - dealloc - Release vs. nil

iphone - 我们可以发布一个 iPhone 应用程序的两个版本吗?

ios - 使用 Swift 4 在 ScrollView 中嵌入 AdMob 广告