2013-04-13 3 views
0

У меня есть подкласс UIViewController, который создает экземпляр подкласса UIView (давайте назовем этот viewA). Затем viewA иногда создает экземпляр другого UIView, который мы будем называть viewB.Центрирование UIView

Я хочу, чтобы viewB был центрирован в контроллере вида.

Мой вопрос: «Что такое (правильный) способ сделать это?»

ТИА

+0

К сожалению, мой вопрос плохо сформулирован. У меня есть контроллер представления, который создает экземпляр viewA, который затем создает экземпляр viewB. viewB не создается экземпляром диспетчера представлений, поэтому обычно он не будет иметь доступа к границам vc, если только я не передам указатель на vc при создании viewA. – RegularExpression

ответ

1

Есть много правильных способов, но, возможно, лучшим вариантом является использование центра -property:

[viewB setCenter: viewA.center]; 

Или, может быть, вам нужно использовать ..

[viewB setCenter: viewA.navigationController.center]; 
+0

Примечание: Это должно быть сделано в методе 'viewWillLayoutSubviews' контроллера вида. – rmaddy

0

Я не знаю более короткий путь, чтобы сделать это, чем это:

CGFloat x = CGRectGetMidX(self.view.bounds) - viewBWidth/2; 
CGFloat y = CGRectGetMidY(self.view.bounds) - viewBHeight/2; 

viewB.frame = CGRectMake(x,y,viewBWidth,viewBHeight); 
0
viewB.frame = [MyClass centeredFrameForSize:desiredSize inRect:viewA.bounds]; 


+ (CGRect)centeredFrameForSize:(CGSize)size inRect:(CGRect)rect 
{ 
    CGRect frame; 
    frame.origin.x = rintf((rect.size.width - size.width)/2) + rect.origin.x; 
    frame.origin.y = rintf((rect.size.height - size.height)/2) + rect.origin.y; 
    frame.size = size; 

    return frame; 
} 
1

Вы должны быть осторожны, чтобы не оказаться на частичной точке. О не сетчатке вы должны быть полными очков, но для сетчатки вы можете быть на 0,5

Один из способов заключается в использовании center, а затем настроить

viewB.center = viewA.center; 
viewB.frame = CGRectIntegral(viewB.frame); 
Смежные вопросы