2010-09-09 5 views
19

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

благодарит заранее.

ответ

24

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

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

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

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

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

+1

предполагает использование пола (parentView.origin.x + ...) вместо (межд) (parentView.origin.x + ...), так как происхождения .x - CGFloat. Если вы включите int, то он снова будет возвращен обратно. –

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

вы должны использовать 'CGRectIntegral()' вместо того, чтобы делать 'floorf()' самостоятельно. – Hlung

0

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

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

Затем использовать его как

CGPoint myPoint = Center(myRect); 
Смежные вопросы