![](/img/trans.png)
[英]How does - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view work
[英]centering a CGRect in a view
我有一个显示在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但没有效果。
提前致谢。
看着:
https://developer.apple.com/documentation/coregraphics/cggeometry
你可以做:
CGPoint center = CGPointMake(CGRectGetMidX(mainRect), CGRectGetMidY(mainRect));
UIView的center
是一个属性,而不是一种方法。
您需要计算要放入的实际位置。您可以通过设置视图的框架或设置其中心来完成此操作,这在您的情况下更简单。
你不说什么查看您然后再去做出imageView
的子视图。 如果你把它放在名为superview
东西里面,你可以这样做:
CGPoint superCenter = CGPointMake(CGRectGetMidX([superview bounds]), CGRectGetMidY([superview bounds]));
[imageView setCenter:superCenter];
根据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可确保您的居中图像不模糊(尽管它可能偏离子像素数量的中心)。
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;
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));
}
如果频繁调用该函数,您还可以使用此处所示的宏以简化操作。
#define Center(x) CGPointMake(CGRectGetMidX(x), CGRectGetMidY(x));
然后就像使用它一样
CGPoint myPoint = Center(myRect);
对于Swift 4:
CGPoint center = CGPoint(x: buttonRect.midX, y: buttonRect.midY)
斯威夫特4
let center = CGPoint(x: bounds.midX, y: bounds.midY)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.