2012-05-06 3 views
1

Вопрос: Возможно ли получить размер, который авторизованный UIView будет указан после поворота экрана, но для получения этого значения до поворот завершен? Если да, то как?Получите размеры, после того, как экран повернут, будет предоставлен авторизованный UIView?

фона: Я строю приложение IPad, который имеет экран, на котором несколько UILabels расположены в столбцах внутри содержащего UIView число меток и длины текста (который меньше, чем основной UIView экрана.) в каждой метке не известно во время компиляции. Они динамически выставляются на экране во время выполнения с помощью алгоритма, который пытается выбрать оптимальное количество столбцов и ширины, которые не позволяют отсечься от экрана. Для того, чтобы сделать процесс rejiggering появляются так гладко, как можно ближе к пользователю, я считаю, что мне нужно сделать это внутри:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

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

ответ

1

В прошивкой 5, viewWillLayoutSubviews будет добиться того, что вы ищете.

В iOS 4 вы можете сделать движения немного менее резкими, оживляя перемещение ваших элементов управления/подзапросов, хотя это происходит в didRotateFromInterfaceOrientation (я знаю, что это не похоже на него, но это делает огромный разница). Таким образом, если вы хотите, чтобы оживить движение от кнопки к newFrame, это так просто, как:

[UIView animateWithDuration:0.25 animations:^{ 
    [button setFrame:newFrame]; 
}]; 

Наконец, разумное использование autoResizingMask, очень помогает, тоже, хотя я понимаю, что это не возможно, учитывая, что вы перемещаете элементы управления по отношению друг к другу.

+0

Спасибо, Роберт. 'viewWillLayoutSubviews' сделал трюк.Поскольку этот метод вызывается во время операции авторотации после того, как контейнеру назначен его новый размер, нет необходимости его получать через какие-либо дополнительные трюки. 'container.frame.size' работает так, как ожидалось. – curtisdf

0

Отъезд:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 

Вы можете найти все эти методы здесь:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

+0

Я знаю об этом методе, спасибо. Я не хочу этого делать, потому что это будет означать, что представление вращается, и * затем * метки все привязаны к новому месту или размеру. Я бы хотел, чтобы все было готово в момент завершения вращения. – curtisdf

+1

На iOS 5 'viewWillLayoutSubviews' еще лучше, делая это как часть вращения. – Rob

+0

В iOS 4 вы можете сделать движения немного менее резкими, оживляя движение, даже если оно происходит в didRotateFromInterfaceOrientation (я знаю, что это не похоже на него, но это имеет огромное значение). Кроме того, разумное использование autoResizingMask (90% времени, которое выполняет эту работу) также очень помогает. – Rob