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