центрирование CGRect в представлении - PullRequest
21 голосов
/ 09 сентября 2010

У меня есть изображение, отображаемое в 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 , но безрезультатно.

спасибо заранее.

Ответы [ 8 ]

54 голосов
/ 01 апреля 2011

Глядя на:

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

Вы можете сделать:

CGPoint center = CGPointMake(CGRectGetMidX(mainRect), CGRectGetMidY(mainRect));
26 голосов
/ 09 сентября 2010

UIView's center - это свойство, а не метод.

Вам необходимо рассчитать фактическое местоположение, в которое вы хотите его вставить. Это можно сделать, установив рамку вида или установив его центр, что проще в вашем случае.

Вы не говорите, что вы потом делаете, и делаете imageView подпредставлением.Если вы помещаете это в нечто, называемое superview, вы можете сделать это:

CGPoint superCenter = CGPointMake(CGRectGetMidX([superview bounds]), CGRectGetMidY([superview bounds]));
[imageView setCenter:superCenter];
7 голосов
/ 09 сентября 2010

Поместите imageView в parentView, основываясь на размере и происхождении прямоугольника 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 гарантирует, что ваше центрированное изображение не будет размытым (хотя оно может быть смещено от центра на величину субпикселя).

4 голосов
/ 09 сентября 2010
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;
3 голосов
/ 15 сентября 2014
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));
}
0 голосов
/ 24 января 2019

Свифт 4

let center = CGPoint(x: bounds.midX, y: bounds.midY)
0 голосов
/ 29 марта 2018

Для Swift 4:

CGPoint center = CGPoint(x: buttonRect.midX, y: buttonRect.midY)
0 голосов
/ 16 апреля 2017

Если функция вызывается часто, вы также можете использовать макросы, как показано здесь для простоты.

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

Тогда используйте это как

CGPoint myPoint = Center(myRect);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...