Вы бы либо создали подкласс UIView, либо поместили бы все в контроллер представления. Я бы выбрал 2-й вариант, так как вам не нужно, чтобы ваш пользовательский вид делал сложные вещи, для этого подкласс выглядит немного «слишком много».
Создайте несколько переменных экземпляра в контроллере вида (в .h):
UILabel *label1, *label2, *label3;
Затем в своем имплементации (в .m) сделайте следующее:
Метод 'viewDidLoad':
// First label... Create and configure.
label1 = [[UILabel alloc] init];
// [Configure here]
[[self view] label1];
// Second label... Create and configure.
label2 = [[UILabel alloc] init];
// [Configure here]
[[self view] label2];
// Third label... Create and configure.
label3 = [[UILabel alloc] init];
// [Configure here]
[[self view] label3];
Затем в методе 'viewDidLoad':
// Release / Nillify everything.
[label1 release], label1 = nil;
[label2 release], label2 = nil;
[label3 release], label3 = nil;
В вашем viewDidAppear и любом другом методе, сигнализирующем об изменении ориентации, вам необходимо настроить макет ... Используйте прямоугольный родительский вид для получения границ / фрейма и измените геометрию 3 меток в соответствии с вашим необходимым макетом .
Если вы предпочитаете делать это с помощью подкласса UIView, вы можете сделать то же самое, но вместо того, чтобы делать макет в viewDidLoad, вам придется делать это в 'layoutSubviews', как вы и планировали. Кроме того, код инициализации / выделения может переходить в initWithCoder: если ваше представление из XIB и освобождение в вашем dealloc.
Надеюсь, это поможет,
Пьер.