2011-03-18 5 views
4

У меня много неприятностей, делающих что-то очень простое. У меня есть viewController и subViewController, как с представлениями, загружаемыми из nib. Для пояснения родительский вид имеет размер 1024 на 748, а subView - 640 на 480 в наконечниках.Задача UIView setCenter

На viewDidLoad в ViewController, я добавить мнение subViewController как так:

[self.view addSubview:self.subViewController.view]; 
NSLog(@"subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame)); 

Выходы журнала:

subview.frame:{{0, 0}, {640, 480}} 

Затем, чтобы проверить вещи, я использую setCenter, чтобы попытаться изменить положение subview внутри родительского вида в том же положении, что и у:

CGPoint newCenter = CGPointMake(0,0); //should stay at the same position.. 
[self.subViewController.view setCenter:newCenter]; 
NSLog(@"after changing center.subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame)); 

Бревенчатые выходов:

after changing center. subview.frame:{{-320, -240}, {640, 480}} 

Теперь у меня есть ощущение, что что-то может быть получение облажалось в наконечниках, и я предполагаю, что это что-то делать с пружинами & распорки/размером & варианты положения. Я могу только догадываться, что это так, потому что это тот факт, что я имею наименьшее понимание того, когда дело доходит до IB.

Любые другие идеи относительно того, что может быть причиной этой проблемы? У вас есть какие-то советы в целом о том, как настроить представления viewcontrollers в IB, чтобы они автоматически позиционировались в соответствии с другими представлениями viewcontrollers? И после настройки, установлен ли SetCenter правильный способ динамического перемещения их?

ответ

6

Выходы правильны, учитывая то, что вы делаете. Точка (0,0) - верхний левый угол. Если вы установите для этого центра subview, то верхний левый угол поднабора действительно будет (-640/2, -480/2).

Чтобы получить верхний левый углы для выравнивания, используйте

[self.subViewController.view setCenter:CGPointMake(320.0,240.0)]; 
+0

Ok я вижу. Я думаю, что мое недоразумение состояло в том, что я думал, что происхождение рамки было таким же, как центр, а не левый верхний угол. Глупая ошибка. Есть ли способ установить начальный центр представления в IB? – donalbain

+0

Извините за беспристрастность. Я честный к богу, никогда не замечал кнопку проверки ниже рейтинговых стрелок. X_O – donalbain

+0

Не стоит беспокоиться. В IB третья вкладка (с линейкой) в окне «Атрибуты» укажет местоположение и размер любых подзонов. Это позволяет точно выровнять центр, стороны или углы, не выполняя программно. – PengOne

0

Проблема неясна. Если вы установите значение центра равным 0,0, то вы должны ожидать, что начало кадра будет -320, -240, как кажется. Возможно, вы неправильно поняли CGRect? CGRect состоит из источника и размера. Рамка - это CGRect. Рамка, размер и центр связаны друг с другом, а также изменяют размер и центр изменения кадра и меняют рамки смены кадров.