CGRect与4个相交。如何找出它主要交叉的矩形?

时间:2015-04-25 14:56:13

标签: ios objective-c iphone xcode

如果您需要更多详细信息:我有可拖动的UICollectionViewCell。当在拖动期间细胞与其他细胞重叠时,我想知道它主要与哪个细胞重叠,以便用该细胞替换重叠的细胞。有没有高效的方法来做到这一点?我在CGGeometry中找不到任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

使用CGRectIntersection(r1,r2)查找交集矩阵(如果有)。将返回的矩形的宽度和高度相乘以获得该区域。比较4个区域以找到最大的区域。

对于UI操作来说,这应该足够快。

答案 1 :(得分:1)

您可以在循环中使用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;
}