是的,您提出的建议有效,但前提是外部的原点CGRect
是 0,0 或者您也将其原点乘以因子。如果你不这样做,内部矩形将移动到右下角。
如果您同时使用多个原点和大小,会发生以下情况:
如果您不乘以外部矩形的原点,则会发生这种情况:
从您的问题来看,您要达到的目标并不完全清楚。如果您想放大一个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
s 时,通常是关于UIView
s。如果您想将 aUIView
在其超级视图中居中,请执行以下操作:
someSubview.center = CGPointMake(CGRectGetMidX(someSuperview.bounds), CGRectGetMidY(someSuperview.bounds));
如果内部视图与外部视图具有相同的超级视图,您可以简单地执行此操作以使其在外部视图中居中:
innerView.center = outerView.center;