UIMotionEffect 和 CoreMotion 有何不同?

How are UIMotionEffect and CoreMotion different?

我非常享受 UIMotionEffect 子类比听 CMMotionManager 更好的结果。使用 CoreMotion 通常会导致不准确,因为也看到许多人通过网络抱怨它。

我找不到任何关于它们有何不同的解释,比如使用了哪些传感器,或者对这些传感器的输出使用了什么操作来解释我所经历的不同结果。

UIMotionEffect 苹果: https://developer.apple.com/documentation/uikit/uimotioneffect

CMMotionManager 苹果: https://developer.apple.com/documentation/coremotion/cmmotionmanager

虽然很明显 CMMotionManager 为您提供了更多功能,如陀螺仪、加速度等,但我主要问的是 roll/pitch 我可以从 UIOffset 中获得覆盖 UIMotionEffect 或从 CMDeviceMotion.attitude.

中获取

这里可能不适合问这个问题,不过我会尽量回答你的。

CoreMotion 是一个 API,用于访问来自加速度计、陀螺仪、磁力计和其他更高级别指示器的传感器的原始值。它可以配置不同的更新配置文件(从非常高的刷新率到经济、省电的刷新率)。

使用 UIMotionEffect,您可以 move/animate 沿设备的水平和垂直轴旋转的视图。它主要用于创建视差效果,如背景在跳板上移动(主屏幕)。您还必须 subclass 这个 class 或使用已经制作的 UIInterpolatingMotionEffect.

UIMotionEffect 专为对 UI 产生快速、微妙的效果而设计,开箱即用,能耗小,而 CoreMotion 更适合密集型陀螺仪像在带有运动控制的游戏中一样使用。

哦,UIMotionEffect 永久居中视图,所以当您旋转 phone 并站在一边时,它会轻轻滑回中心以匹配您的新位置,在游戏中用处不大。