0

私は aCGRect ACGRect BwhereBを中心にしていますA(aCGRectには、x と y の原点と、長方形の高さと幅のサイズが含まれています)。の幅と高さをAある比率で増やし、さらに の幅と高さを同じ比率で増やすと、 の x 原点と y 原点にこの同じ比率Bを掛けます(幅と高さについて)。両方が新しい割合で成長するにつれて、それは中心に留まりますか?いくつかの異なるシナリオでこれをテストしましたが、うまくいきましたが、私は数学がそれほど得意ではないので、すべての状況でうまくいくことを確認したかっただけです.BBBA

また、a のすべての値にこの比率を手動で掛けなくても単純に掛けることができる方法があるかどうか疑問に思ってCGRectいました (ドキュメントには見つかりませんでした)。

更新:実際には、これは機能しません...両方のサイズが比例して増加した後、ビューを別のビュー内に正しく配置できるようにする方法を考えようとしています。

4

1 に答える 1

2

はい、あなたが提案したものは機能しますが、アウターの原点CGRectが 0,0 の場合、またはその原点にも係数を掛けた場合のみです。そうしないと、内側の四角形が右下にずれてしまいます。

原点とサイズの両方を乗算すると、次のようになります。

CGRect の CGRect を中央に配置

外側の四角形の原点を乗算しないと、次のようになります。

ここに画像の説明を入力

あなたの質問から、あなたが達成しようとしていることは完全には明らかではありません。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は、通常UIViewsについてです。UIViewスーパービューの中央に配置するには、次のようにします。

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

内側のビューに外側のビューと同じスーパービューがある場合、これを実行して外側のビューの中央に配置できます。

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