我有一个基于UIActionSheet的课程。如果检测到设备方向旋转,则此类创建的ActionSheets设计为消失。
所以,当这堂课开始时我有
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
并且在didRotate上:我有解雇,将ActionSheet发送出去。
唯一的小问题是:任何振动都会导致actionSheet解雇。即使用更多的力量敲击也会让popoup消失。即使您在actionSheet中输入内容。
我没有启用任何加速计或coremotion。
任何线索?
感谢
编辑
我发现问题在于,最初将方向报告为UIDeviceOrientationUnknown,并且trepidation使其报告正确的方向。由于UIDeviceOrientationUnknown与正确的方向不同,这被视为轮换更改......
现在我注定了。
答案 0 :(得分:2)
只需检查您所拥有的interfaceOrientation。从iOS开始,PortraitUp和facedown都支持界面方向。发生在你身上的是那幅肖像(躺在桌子上)正在转向正面,反之亦然。只需检查that即可。请注意,您正在查看UIDevice Orientation,它不是UIInterfaceOrientation!
答案 1 :(得分:2)
很难彻底解决这个问题,因为检测您感兴趣的旋转类型的最佳方法是UIViewController
而不是UIView
。在UIViewController
中你有willRotateToInterfaceOrientation:duration:
,它告诉你即将发生自转。此方法在UIViewController
上,因为控制器有责任允许或拒绝自动旋转。为了将此信息传达给您的视图,您可以在旋转即将开始时发布NSNotification
。然后,您的UIActionSheet
子类可以侦听此通知并适当地调整自身形状。或者,您可以向子类添加一个方法,以直接通知它旋转。这取决于您需要在UIView
子类中监听自动旋转的频率,以及您对重用的需求有多强。
答案 2 :(得分:0)
在我的情况下,我正在做
if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)
{
//Do Stuff
}
else
{
//Do Stuff
}
所以我在FACEUP和FACEDown活动中进入了我的其他地方,这是错误的!
if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)
{
//Do Stuff
}
else if(orientation == UIDeviceOrientationPortrait)
{
//Do Stuff
}