[英]CGRect intersects 4 rects. How to figure out which rect it intersects mostly?
如果您需要更多详细信息:我有可拖动的UICollectionViewCell。 当单元在拖动过程中与其他单元重叠时,我想知道它最重叠的是哪个单元,以便用此单元替换重叠的单元。 有什么有效的方法可以做到这一点吗? 我发现CGGeometry没有任何帮助。 谢谢。
使用CGRectIntersection(r1,r2)查找交点rect(如果有)。 将返回的矩形的宽度和高度相乘得到面积。 比较这四个区域以找到最大的区域。
对于UI操作而言,这应该足够快。
您可以在循环中使用CGRectUnion(),面积最小的那个将是重叠最大的那个。 您可以编写一个处理(并返回)CGRects的函数,但是您可能需要再次遍历视图(单元格)以找到正确的视图,因此我将其保持在UIView级别...例如
//helpers
CGFloat CGRectGetArea(CGRect theRect){
return theRect.size.width * theRect.size.height;
}
-(UIView *)viewClosestToView:(UIView*)keyView fromViews:(NSArray*)comparisonViews{
UIView *result=nil;
CGFloat smallestArea=0.0;
for (UIView *view in comparisonViews){
CGFloat area = CGRectGetArea( CGRectUnion(view.frame, keyView.frame) );
if ((area < smallestArea)|| ((NSInteger)smallestArea==0) ){
smallestArea=area;
result=view;
}
}
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.