我想我正在尝试做和你一样的事情。我想获得两个矩形之间的特定重叠。我发现 CGRectUnion 非常有用,因为它给出了包含两个矩形的最小矩形。如果尺寸大于您的“最大”,那么您知道矩形与右侧或底部重叠。如果原点为负,则您知道矩形与顶部或左侧重叠。我编写了这个函数来给出纠正重叠所需的偏移量。
CGPoint GetOffsetBetweenFrames(CGRect maxBounds, CGRect frame)
{
CGRect frameUnion = CGRectUnion(maxBounds, frame);
CGPoint offset = CGPointZero;
if (CGRectGetMinX(frameUnion) < 0)
offset.x = -frameUnion.origin.x;
else if (CGRectGetWidth(frameUnion) > CGRectGetWidth(maxBounds))
offset.x = -(CGRectGetWidth(frameUnion) - CGRectGetWidth(maxBounds));
if (CGRectGetMinY(frameUnion) < 0)
offset.y = -frameUnion.origin.y;
else if (CGRectGetHeight(frameUnion) > CGRectGetHeight(maxBounds))
offset.y = -(CGRectGetHeight(frameUnion) - CGRectGetHeight(maxBounds));
return offset;
}
哦,还有快速编辑:要应用偏移量,它很简单:
offset = GetOffsetBetweenFrames(maxBounds, frame);
frame = CGRectOffset(frame, offset.x, offset.y);