我的应用程序使用 CMMotionManager 来跟踪设备运动,但 iOS 始终以标准设备方向(底部的主页按钮)返回设备运动数据。
为了让运动数据与我的 UIView 具有相同的方向,我将视图变换从我的视图向下累积到窗口,如下所示:
CGAffineTransform transform = self.view.transform;
for (UIView *superview = self.view.superview; superview; superview = superview.superview) {
CGAffineTransform superviewTransform = superview.transform;
transform = CGAffineTransformConcat(transform, superviewTransform);
}
此变换在 iOS 6 和 7 下正确计算,但 iOS 8 更改了旋转模型,现在无论设备如何定向,视图始终返回标识变换(无旋转)。尽管如此,来自运动管理器的数据仍然固定在标准方向。
监视 UIDevice 旋转通知并手动计算四个变换似乎是在 iOS 8 下获取此变换的一种方法,但它也似乎很糟糕,因为设备方向不一定与我的视图方向匹配(即,iPhone 上的上行是设备方向不是通常支持)。
在 iOS 8 下,将 CMMotionManager 的输出转换为特定 UIView 的方向的最佳方法是什么?