Реальная проблема возникает, когда ваш интерфейс повернут в горизонтальную плоскость, а родительский контроллер представления преобразован в него. Поверь мне, это реалистичный сценарий, дох. Затем лист действий обрезается, и вы не можете использовать parentViewController, потому что он преобразован. Чтобы избежать всех этих проблем, нужно создать новое окно, добавить вращающийся контроллер представления в качестве rootViewController и использовать его представление для отображения листа.
CGRect applicationRect = [[UIScreen mainScreen] bounds];
UIWindow* actionSheetWindow = [[UIWindow alloc] initWithFrame:applicationRect];
RotationViewController* rootViewController = [[RotationViewController alloc] initWithNibName:nil bundle:nil];
actionSheetWindow.rootViewController = rootViewController;
[rootViewController release];
actionSheetWindow.hidden = NO;
UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:nil];
[actionSheet setCancelButtonWithTitle:@"Cancel" handler:^{
actionSheetWindow.hidden = YES;
[actionSheetWindow release];
}];
[actionSheet showInView:rootViewController.view];
Приведенный выше код использует BlocksKit, но вы можете сделать это также с помощью свойств делегата и экземпляра actionSheet.
RotationViewController - это просто подкласс UIViewController, который реализует
- (void) viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor clearColor];
self.view.opaque = NO;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}