如果是用于视图本身的判断,楼上的方法够用了,如果是想判断 矩形和圆形的交集问题,其实还有有些小复杂的,我搜集了一些资料,封装了一个方法,可以直接在自己的项目中用,特定场景下,是很有用的: 我封装了一个代码,可以直接拿到自己项目中直接用: /** * 计算任意圆和矩形是否有交集. * * @param rect 矩形的边框. * @param center 圆心. * @param r 圆的半径. * * @return YES,圆和矩形有交集; NO,圆和矩形无交集. */ - (BOOL) boxCircleIntersectWithRect:(CGRect) rect center: (CGPoint) center r: (double) r { // 初始输入. double c[] = {rect.origin.x + rect.size.width / 2.0, rect.origin.y + rect.size.height / 2.0}; // 矩形中心向量. double h[] = {rect.size.width / 2.0, rect.size.height / 2.0};; // 矩形半长向量,即从矩形中心到矩形顶点的向量. double p[] = {center.x, center.y}; // 圆心向量. double v[] = {0, 0}; // 圆心与矩形中心的向量表示. double u[] = {0, 0}; // 圆心与矩形最短距离的矢量 // 第一步: 转换至第一象限. vDSP_vsubD(c, 1, p, 1, v, 1, 2); vDSP_vabsD(v, 1, v, 1, 2); // 第二步: 求圆心至矩形的最短距离矢量. vDSP_vsubD(h, 1, v, 1, u, 1, 2); double zero[] = {0.0, 0.0}; vDSP_vmaxD(u, 1, zero, 1, u, 1, 2); // 第三步: 长度平方与半径平方比较 double dotResult = 0.0; vDSP_dotprD(u, 1, u, 1, &dotResult, 2); double powR = pow(r, 2); BOOL result = (dotResult <= powR ); return result; } 算法灵感来源于知乎,不过它是用伪码实现的,参见: 怎样判断平面上一个矩形和一个圆形是否有重叠?需要用到 iOS 向量操作的相关知识,可以看下CSDN这篇文章: IOS中的矩阵和向量运算更多讨论,参见: iOS 检查一个view 是否在 一个 圆 的范围内
CGPathContainsPoint(<#CGPathRef _Nullable path#>, <#const CGAffineTransform * _Nullable m#>, <#CGPoint point#>, <#bool eoFill#>)
如果是用于视图本身的判断,楼上的方法够用了,如果是想判断 矩形和圆形的交集问题,其实还有有些小复杂的,我搜集了一些资料,封装了一个方法,可以直接在自己的项目中用,特定场景下,是很有用的:
我封装了一个代码,可以直接拿到自己项目中直接用:
算法灵感来源于知乎,不过它是用伪码实现的,参见: 怎样判断平面上一个矩形和一个圆形是否有重叠?
需要用到 iOS 向量操作的相关知识,可以看下CSDN这篇文章:
IOS中的矩阵和向量运算
更多讨论,参见: iOS 检查一个view 是否在 一个 圆 的范围内