Центрирование 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, но без эффекта.
заблаговременно.
Ответы
Ответ 1
UIView center
- это свойство, а не метод.
Вам нужно рассчитать фактическое местоположение, в которое вы хотите поместить его. Вы можете сделать это, установив фрейм представления или установив его центр, который проще в вашем случае.
Вы не скажете, какой вид вы затем сделаете, сделав imageView
подпунктом. Если вы помещаете его во что-то под названием superview
, вы можете сделать это:
CGPoint superCenter = CGPointMake(CGRectGetMidX([superview bounds]), CGRectGetMidY([superview bounds]));
[imageView setCenter:superCenter];
Ответ 2
Глядя на:
https://developer.apple.com/documentation/coregraphics/cggeometry
Вы можете сделать:
CGPoint center = CGPointMake(CGRectGetMidX(mainRect), CGRectGetMidY(mainRect));
Ответ 3
Расположите imageView в родительском представлении в зависимости от размера и начала родительского элемента rect.
Учитывая родительское представление с именем 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
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;
Ответ 5
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));
}
Ответ 6
Если функция вызывается часто, вы также можете использовать макросы, как показано здесь для простоты.
#define Center(x) CGPointMake(CGRectGetMidX(x), CGRectGetMidY(x));
Затем используйте его как
CGPoint myPoint = Center(myRect);
Ответ 7
Для Swift 4:
CGPoint center = CGPoint(x: buttonRect.midX, y: buttonRect.midY)
Ответ 8
Swift 4
let center = CGPoint(x: bounds.midX, y: bounds.midY)