计算大小改变后插入的CGRect的新来源

我有一个CGRect ACGRect B ,其中CGRect BB中居中( CGRect包含矩形的x和y原点以及高度和宽度大小)。 如果我按一定的比例增加A的宽度和高度,并且以相同的比例增加B的宽度和高度,则将以相同的比例乘以B的原点和B的原点(对于宽度和高度恭敬地),那么B将保持在A的中心吗? 我已经在几个不同的情况下testing了这个,它可以工作,但只是想validation它适用于所有情况,因为我不是那么尖锐的math。

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

更新:实际上,这是行不通的…试图想到一种方法,这将允许我正确地在另一个视图中放置一个视图后,两者的比例增加。

是的,你提出的build议是有效的,但是只有当外部CGRect的起源是0,0,或者如果你将它的原点乘以因子,也是如此。 如果你不这样做,那么内在的权力就会转移到右下angular。

以下是如果您同时使用原点和大小都会发生的情况:

在CGRect中心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); 

但是,在处理CGRect的时候,通常是关于UIView的。 如果你想在一个UIView的超级视图中,做到这一点:

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

如果内部视图与外部视图具有相同的超级视图,则可以简单地将其放在外部视图中:

 innerView.center = outerView.center;