はい、あなたが提案したものは機能しますが、アウターの原点CGRect
が 0,0 の場合、またはその原点にも係数を掛けた場合のみです。そうしないと、内側の四角形が右下にずれてしまいます。
原点とサイズの両方を乗算すると、次のようになります。
外側の四角形の原点を乗算しないと、次のようになります。
あなたの質問から、あなたが達成しようとしていることは完全には明らかではありません。a を拡大しCGRect
て別の a を (再) 中央に配置する場合は、次の関数を使用します。
// 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);
ただし、sを扱う場合CGRect
は、通常UIView
sについてです。UIView
スーパービューの中央に配置するには、次のようにします。
someSubview.center = CGPointMake(CGRectGetMidX(someSuperview.bounds), CGRectGetMidY(someSuperview.bounds));
内側のビューに外側のビューと同じスーパービューがある場合、これを実行して外側のビューの中央に配置できます。
innerView.center = outerView.center;