我的应用有一个无法改变方向的视图控制器。把它想象成一个需要保持固定的运动场。
我现在想提出一个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成为它的子节点。但是,这意味着我的比赛区域被新的视图控制器完全遮挡了。)
答案 0 :(得分:7)
事实证明答案非常简单。添加此代码以强制UIActionSheets到您想要的任何方向:
tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
tempView.transform = CGAffineTransformMakeRotation(lastUIAngle);
tempView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view.window addSubview:tempView];
UIActionSheet *actionSheet = ...
[actionSheet showInView:tempView];
lastUIAngle是pi / 2的倍数,在这种情况下,我从上次更改方向时保存了。
答案 1 :(得分:0)
检查此替代方案 - > JonasGessner/JGActionSheet如果您不介意基本布局,或者您可以在src代码中修改它。
这适用于iOS 8.0.2。如下所示:
将JGActionSheet.h
和JGActionSheet.m
复制到您的项目
#import "JGActionSheet.h"
示例代码:
JGActionSheetSection *menuSection = [JGActionSheetSection sectionWithTitle:nil message:@"Select Food" buttonTitles:@[@"Hamburger", @"Toast", @"Rice"] buttonStyle:JGActionSheetButtonStyleDefault];
[menuSection setButtonStyle:JGActionSheetButtonStyleRed forButtonAtIndex:0];
JGActionSheetSection *cancelSection = [JGActionSheetSection sectionWithTitle:nil message:nil buttonTitles:@[@"Cancel"] buttonStyle:JGActionSheetButtonStyleCancel];
NSArray *sections = @[menuSection, cancelSection];
JGActionSheet *sheet = [JGActionSheet actionSheetWithSections:sections];
[sheet setButtonPressedBlock:^(JGActionSheet *sheet, NSIndexPath *indexPath) {
[sheet dismissAnimated:YES];
}];
// Set specific orientation to action sheet
sheet.transform = CGAffineTransformMakeRotation(M_PI);
[sheet showInView:self.view animated:YES];