0

我有一个CGRect A并且CGRect B在其中B居中A(aCGRect包含矩形的 x 和 y 原点以及高度和宽度大小)。如果我将 的宽度和高度增加A某个比例,并将宽度和高度增加B相同的比例,将 x 原点B和 y 原点乘以B相同比例(分别为宽度和高度),将保持B在中心,A因为两者都以新的比例增长?我已经在几个不同的场景中对此进行了测试并且它有效,但只是想验证它是否适用于所有情况,因为我的数学并不那么敏锐。

另外,想知道是否有一种方法可以简单地将 a 的所有值乘以CGRect这个比例,而无需手动进行(在文档中找不到)。

更新:实际上,这行不通……试图想出一种方法,使我能够在两者的大小成比例增加后正确地将视图定位在另一个视图中。

4

1 回答 1

2

是的,您提出的建议有效,但前提是外部的原点CGRect是 0,0 或者您也将其原点乘以因子。如果你不这样做,内部矩形将移动到右下角。

如果您同时使用多个原点和大小,会发生以下情况:

在 CGRect 中居中 CGRect

如果您不乘以外部矩形的原点,则会发生这种情况:

在此处输入图像描述

从您的问题来看,您要达到的目标并不完全清楚。如果您想放大一个CGRect并(重新)居中另一个,请使用以下功能:

//  center a CGRect in another one
static inline CGRect ALRectCenterInRect(CGRect outerRect, CGRect innerRect)
{
    return CGRectMake(CGRectGetMidX(outerRect)-innerRect.size.width/2, CGRectGetMidY(outerRect)-innerRect.size.height/2, innerRect.size.width, innerRect.size.height);
}

//  multiply each value of a CGRect with factor
//      combine with CGRectIntegral() to prevent fractions (and the resulting aliasing)
static inline CGRect ALRectMultiply(CGRect rect, CGFloat factor)
{
    return CGRectMake(rect.origin.x*factor, rect.origin.y*factor, rect.size.width*factor, rect.size.height*factor);
}

如何使用它们:

CGRect centeredInnerRect = ALRectCenterInRect(outerRect, innerRect);

CGRect multipliedRect = ALRectMultiply(someRect, 1.5);

但是,在处理CGRects 时,通常是关于UIViews。如果您想将 aUIView在其超级视图中居中,请执行以下操作:

someSubview.center = CGPointMake(CGRectGetMidX(someSuperview.bounds), CGRectGetMidY(someSuperview.bounds));

如果内部视图与外部视图具有相同的超级视图,您可以简单地执行此操作以使其在外部视图中居中:

innerView.center = outerView.center;
于 2012-08-09T09:26:25.973 回答