mah*_*udz 5 uiviewcontroller uiactionsheet uiinterfaceorientation ios
我的应用程序有一个视图控制器,无法更改方向.把它想象成一个需要保持固定的运动场.
我现在想要提出一个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;
Run Code Online (Sandbox Code Playgroud)
我设法得到正确的方向,但最终的动作表从纵向侧出现,并且大小就像是纵向还是一样.动作表的框架是根据按钮数等计算的.
有没有人设法迫使UIActionSheet正确显示在指定的方向?
(我也尝试创建一个新的视图,它被转换并具有正确的大小,但是UIActionSheet忽略了它.剩下的是创建一个自动旋转的新UIViewController,并让UIActionSheet成为它的一个孩子.但是,这意味着新的视图控制器完全掩盖了我的比赛场地.)
事实证明答案很简单.添加此代码以强制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];
Run Code Online (Sandbox Code Playgroud)
lastUIAngle是pi/2的倍数,在这种情况下,我从上次更改方向时保存了.
| 归档时间: |
|
| 查看次数: |
2273 次 |
| 最近记录: |