web-dev-qa-db-ja.com

CGRectをビューの中央に配置する

CGRectに画像を表示しています。長方形をビューの中央に配置するにはどうすればよいですか?

これが私のコードです:

UIImage * image = [UIImage imageNamed:place.image];
CGRect rect = CGRectMake(10.0f, 90.0f, image.size.width, image.size.height);

UIImageView * imageView = [[UIImageView alloc] initWithFrame:rect];
[imageView setImage:image];

imageView.centerを試しましたが、効果がありません。

前もって感謝します。

22
hanumanDev

UIViewのcenterはプロパティであり、メソッドではありません。

配置する実際の位置を計算する必要があります。これは、ビューのフレームを設定するか、ビューの中心を設定することで実行できます。これは、場合によっては簡単です。

imageViewをサブビューにするビューを指定しません。 superviewという名前の中に入れる場合は、次のようにすることができます。

CGPoint superCenter = CGPointMake(CGRectGetMidX([superview bounds]), CGRectGetMidY([superview bounds]));
[imageView setCenter:superCenter];
27
Ben Zotto

見つめている:

https://developer.Apple.com/documentation/coregraphics/cggeometry

できるよ:

CGPoint center = CGPointMake(CGRectGetMidX(mainRect), CGRectGetMidY(mainRect));
54
Kitt Hirasaki

ParentViewのrectのサイズと原点に基づいて、imageViewをparentViewに配置します。

ParentViewという名前の親ビューがある場合:

float parentRect = parentView.frame;
float imageRect = imageView.frame;

imageRect.Origin.x = (int)(parentView.Origin.x + (parentRect.size.width - imageRect.size.width) / 2);
imageRect.Origin.y = (int)(parentView.Origin.y + (parentRect.size.height- imageRect.size.height) / 2);
imageView.frame = imageRect;

原点をintにキャストすると、中央に配置された画像がぼやけないようになります(ただし、サブピクセル量だけ中央からずれている場合があります)。

7
Peter
CGRect r = thingToCenter.frame;
r.Origin = parentView.bounds.Origin;
r.Origin.x = parentView.bounds.size.width / 2  - r.size.width / 2;
r.Origin.y = parentView.bounds.size.height / 2  - r.size.height / 2 + 12;
thingToCenter.frame = r;
4
DexterW
CGRect CGRectIntegralCenteredInRect(CGRect innerRect, CGRect outerRect) {
    CGFloat originX = outerRect.Origin.x + ((outerRect.size.width - innerRect.size.width) * 0.5f);
    CGFloat originY = outerRect.Origin.y + ((outerRect.size.height - innerRect.size.height) * 0.5f);
    return CGRectIntegral(CGRectMake(originX, originY, innerRect.size.width, innerRect.size.height));
}
3
Rob

Swift 4:

CGPoint center = CGPoint(x: buttonRect.midX, y: buttonRect.midY)
1
Bill Chan

関数が頻繁に呼び出される場合は、簡単にするために、ここに示すようなマクロを使用することもできます。

#define Center(x) CGPointMake(CGRectGetMidX(x), CGRectGetMidY(x));

次に、次のように使用します

CGPoint myPoint = Center(myRect);
0
FireMango

スウィフト4

let center = CGPoint(x: bounds.midX, y: bounds.midY)
0
Mike Demidov