计算大小改变后插入的CGRect的新来源
我有一个CGRect A
和CGRect B
,其中CGRect B
在B
中居中( CGRect
包含矩形的x和y原点以及高度和宽度大小)。 如果我按一定的比例增加A的宽度和高度,并且以相同的比例增加B
的宽度和高度,则将以相同的比例乘以B
的原点和B
的原点(对于宽度和高度恭敬地),那么B
将保持在A
的中心吗? 我已经在几个不同的情况下testing了这个,它可以工作,但只是想validation它适用于所有情况,因为我不是那么尖锐的math。
另外,想知道是否有一种方法可以简单地让您将CGRect
的所有值乘以这个比例,而不必手动执行(在文档中找不到一个)。
更新:实际上,这是行不通的…试图想到一种方法,这将允许我正确地在另一个视图中放置一个视图后,两者的比例增加。
是的,你提出的build议是有效的,但是只有当外部CGRect
的起源是0,0,或者如果你将它的原点乘以因子,也是如此。 如果你不这样做,那么内在的权力就会转移到右下angular。
以下是如果您同时使用原点和大小都会发生的情况:
如果你不乘以外部矩形的起源,会发生这种情况:
从你的问题来看,你试图达到的目标并不完全清楚。 如果你想放大一个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;