Принуждение UIActionSheet к использованию определенной ориентации

В моем приложении есть один контроллер представления, который не может изменять ориентацию. Думайте об этом как об игровом поле, которое должно оставаться неизменным.

Теперь я хочу разместить UIActionSheet, но, учитывая способ, которым пользователь держит устройство, я бы хотел сопоставить лист с ориентацией.

Кажется, что UIActionSheet, в отличие, скажем, от MFComposerViewController, не получает свою ориентацию от StatusBar, который я вращаю в зависимости от ориентации, но получает свою ориентацию от базового контроллера представления. Другими словами, UIActionSheet отображается в портретной ориентации независимо от того, как удерживается устройство.

Я пробовал:

CGAffineTransform   t = CGAffineTransformMakeRotation(lastUIAngle);
[actionSheet setTransform:t];
if (UIInterfaceOrientationIsLandscape(lastOrientation))
    actionSheet.frame = CGRectMake(0, 0, 480, 320);
else 
    actionSheet.frame = CGRectMake(0, 0, 320, 480);
actionSheet.center = self.view.center;

И мне удалось получить правильную ориентацию, но в результате лист действий появляется с портретной стороны и имеет такой размер, как если бы он все еще был в портретной ориентации. Рамка листа действий рассчитывается на основе количества кнопок и т. Д.

Кому-нибудь удалось заставить UIActionSheet правильно отображаться в указанной ориентации?

(Я также попытался создать новое представление, которое было преобразовано и имело правильный размер, но UIActionSheet проигнорировал его. Осталось создать новый UIViewController, который автоматически вращается, и сделать UIActionSheet его дочерним элементом.Однако это означает, что мое игровое поле полностью закрывается новым контроллером представления.)

5
задан mahboudz 11 November 2011 в 21:40
поделиться