2012-04-27 125 views

回答

4

下面是用于计算由CGSize表示的两个CGRects之间距离的快速功能:

CGSize CGSizeDistanceBetweenRects(CGRect rect1, CGRect rect2) 
{ 
    if (CGRectIntersectsRect(rect1, rect2)) 
    { 
     return CGSizeMake(0, 0); 
    } 

    CGRect mostLeft = rect1.origin.x < rect2.origin.x ? rect1 : rect2; 
    CGRect mostRight = rect2.origin.x < rect1.origin.x ? rect1 : rect2; 

    CGFloat xDifference = mostLeft.origin.x == mostRight.origin.x ? 0 : mostRight.origin.x - (mostLeft.origin.x + mostLeft.size.width); 
    xDifference = MAX(0, xDifference); 

    CGRect upper = rect1.origin.y < rect2.origin.y ? rect1 : rect2; 
    CGRect lower = rect2.origin.y < rect1.origin.y ? rect1 : rect2; 

    CGFloat yDifference = upper.origin.y == lower.origin.y ? 0 : lower.origin.y - (upper.origin.y + upper.size.height); 
    yDifference = MAX(0, yDifference); 

    return CGSizeMake(xDifference, yDifference); 
} 
+0

感谢您的回答。但是,假设矩形的大小不一样,我应该如何考虑尺寸差异? – 2013-03-06 14:47:45

+0

如果我明白你在问什么,我不舒服,因为imo。这种方法将找到两个CGRect之间的最短距离,而不管它们的大小 – jalmaas 2013-03-07 07:55:52

2

在一个稍微有关说明,这里是如何计算中心两个给定CGRects的之间的距离:

CGFloat CGRectGetDistanceBetweenCenters(CGRect rect1, CGRect rect2) 
{ 
    CGPoint center1 = CGPointMake(CGRectGetMidX(rect1), CGRectGetMidY(rect1)); 
    CGPoint center2 = CGPointMake(CGRectGetMidX(rect2), CGRectGetMidY(rect2)); 

    CGFloat horizontalDistance = (center2.x - center1.x); 
    CGFloat verticalDistance = (center2.y - center1.y); 

    CGFloat distance = sqrt((horizontalDistance * horizontalDistance) + (verticalDistance * verticalDistance)); 

    return distance; 
}