使用CoreMotion框架,我已经看到了两种方式来描述不同设备方向的落后对象行为.我已经在代码中尝试过这两个版本,它们似乎都像我期望的一样,即不论设备方向如何,都落在地球上.我只是好奇为什么两个版本的行为都一样,即使在第一个版本中,x和y方向的加速度,即dx和dy,是以横向切换的?
提前感谢任何建议或帮助!
1)
- if var dx = data?.acceleration.x,var dy = data?.acceleration.y {
- switch UIDevice.currentDevice().orientation {
- case .Portrait:
- dy = -dy
- case .PortraitUpsideDown:
- break
- case .LandscapeRight:
- swap(&dx,&dy)
- case .LandscapeLeft:
- swap(&dx,&dy)
- dy = -dy
- default:
- dx = 0
- dy = 0
- }
- gravity.gravityDirection = CGVector(dx: dx,dy: dy)
- }
2)
- if var dx = data?.acceleration.x,var dy = data?.acceleration.y {
- switch UIDevice.currentDevice().orientation {
- case .Portrait:
- dy = -dy
- case .PortraitUpsideDown:
- break
- case .LandscapeRight:
- break
- case .LandscapeLeft:
- break
- default:
- dx = 0
- dy = 0
- }
- gravity.gravityDirection = CGVector(dx: dx,dy: dy)
- }
解决方法
我想你正在使用模拟器,所以重力总是与底部正交.
在真实的设备上,行为应该有所不同,因为您将始终至少轻轻地倾斜设备.