2010-09-09 4 views
19

Tôi có hình ảnh hiển thị trong CGRect. làm thế nào để tôi trung tâm rect trong xem?định tâm một CGRect theo cách xem

đây là mã của tôi:

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]; 

Tôi đã thử imageView.center nhưng để có hiệu lực.

cảm ơn trước.

Trả lời

24

UIView's center là thuộc tính, không phải là phương pháp.

Bạn cần tính vị trí thực tế bạn muốn đặt. Bạn có thể thực hiện việc này bằng cách đặt khung của chế độ xem hoặc bằng cách đặt trung tâm của nó, điều này đơn giản hơn trong trường hợp của bạn.

Bạn không cho biết chế độ xem bạn thực hiện là gì imageView một chế độ xem phụ của. Nếu bạn đang đặt nó bên trong một cái gì đó gọi là superview, bạn có thể làm điều này:

CGPoint superCenter = CGPointMake(CGRectGetMidX([superview bounds]), CGRectGetMidY([superview bounds])); 
[imageView setCenter:superCenter]; 
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

Chức các IMAGExem trong parentView dựa trên kích thước và nguồn gốc của rect của parentView.

Với một cái nhìn cha mẹ đặt tên 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; 

Đúc nguồn gốc để int đảm bảo rằng hình ảnh trung tâm của bạn không bị mờ (mặc dù nó có thể được tắt trung tâm của một lượng subpixel).

+1

đề nghị sàn sử dụng (parentView.origin.x + ...) thay vì (int) (parentView.origin.x + ...), bởi vì nguồn gốc .x là CGFloat. Nếu bạn cast vào int, sau đó nó sẽ được cast trở lại float một lần nữa. –

3
CGRect CGRectIntegralCenteredInRect(CGRect innerRect, CGRect outerRect){ 
    CGFloat originX = floorf((outerRect.size.width - innerRect.size.width) * 0.5f); 
    CGFloat originY = floorf((outerRect.size.height - innerRect.size.height) * 0.5f); 
    return CGRectMake(originX, originY, innerRect.size.width, innerRect.size.height); 
} 
+1

bạn nên sử dụng 'CGRectIntegral()' thay vì tự làm 'floorf()'. – Hlung

0

Nếu hàm được gọi thường xuyên, bạn cũng có thể sử dụng các macro như trình bày ở đây vì đơn giản.

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

Sau đó, sử dụng nó như

CGPoint myPoint = Center(myRect);