如何检测 iPhone 6 设备的运动? (确定 iPhone 设备是不是移动 - x,y,z- 上的最小可能运动)

Posted

技术标签:

【中文标题】如何检测 iPhone 6 设备的运动? (确定 iPhone 设备是不是移动 - x,y,z- 上的最小可能运动)【英文标题】:how to detect motion of iPhone 6 device? (determine whether iPhone device moved or not -smallest possible motion on x,y,z- )如何检测 iPhone 6 设备的运动? (确定 iPhone 设备是否移动 - x,y,z- 上的最小可能运动) 【发布时间】:2015-07-16 10:15:51 【问题描述】:

我正在执行一项任务,以确定 iPhone 6 何时在任何方向(x、y 或 Z)移动(最小可能的移动,甚至没有晃动!)。 实现这一目标的最佳方法是什么?

【问题讨论】:

您对这段代码有什么疑问? 我需要知道这是最好的方法还是有更好的选择 【参考方案1】:

我使用了这段代码,发现它很有用,它包含四个功能: - 启动运动管理器 - 停止运动管理器 - 更新运动管理器 - 幅度来自态度

import CoreMotion
let motionManager: CMMotionManager = CMMotionManager()
var initialAttitude : CMAttitude!

//start motion manager
func StartMotionManager () 
    if !motionManager.deviceMotionActive 
        motionManager.deviceMotionUpdateInterval = 1
    motionManager.startDeviceMotionUpdates()
    

//stop motion manager
func stopMotionManager ()

    if motionManager.deviceMotionActive
    
 motionManager.stopDeviceMotionUpdates()
    


//update motion manager
func updateMotionManager (var x : UIViewController) 


    if motionManager.deviceMotionAvailable 
        //sleep(2)
        initialAttitude  = motionManager.deviceMotion.attitude
        motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler:
            [weak x] (data: CMDeviceMotion!, error: NSError!) in

            data.attitude.multiplyByInverseOfAttitude(initialAttitude)

            // calculate magnitude of the change from our initial attitude
            let magnitude = magnitudeFromAttitude(data.attitude) ?? 0
            let initMagnitude = magnitudeFromAttitude(initialAttitude) ?? 0

            if magnitude > 0.1 // threshold
            
                // Device has moved ! 
               // put the code which should fire upon device moving write here

                initialAttitude  = motionManager.deviceMotion.attitude
            
                       )

        println(motionManager.deviceMotionActive) // print false
    




// get magnitude of vector via Pythagorean theorem
func magnitudeFromAttitude(attitude: CMAttitude) -> Double 
    return sqrt(pow(attitude.roll, 2) + pow(attitude.yaw, 2) + pow(attitude.pitch, 2))

【讨论】:

以上是关于如何检测 iPhone 6 设备的运动? (确定 iPhone 设备是不是移动 - x,y,z- 上的最小可能运动)的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 检测到用户向上移动了他们的设备

我如何将 iphone 运动检测用于类似鸡蛋摇晃的应用程序?

检测 iPhone 移动是不是改变方向?

iPhone - 使用陀螺仪/加速度计检测运动

如何在 Flutter 中检测设备运动方向?

如何使用设备的加速度计检测运动增加然后突然停止?