Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 有没有办法得到震动的强度?_Ios_Swift - Fatal编程技术网

Ios 有没有办法得到震动的强度?

Ios 有没有办法得到震动的强度?,ios,swift,Ios,Swift,我正在做一个POC,看看我是否能找到震动的强度 class ViewController: UIViewController { override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent) { println("started shaking!") } override func motionEnded(motion: UIEventSubtype, withEv

我正在做一个POC,看看我是否能找到震动的强度

class ViewController: UIViewController {
    override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent) {
        println("started shaking!")
    }

    override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
        println("ended shaking!")
    }
}

我看不到任何东西能告诉我震动有多剧烈。在我的例子中,此抖动可能是持续几秒钟的事件。

您可以使用框架读取加速计值的原始流。

这是我在DIDCharated回调中输入的代码,其中包含一些类变量和常量:

UIAccelerationValue accelX, accelY, accelZ;
#define  kAccelerometerFrequency 25 //Hz
#define  kFilteringFactor 0.1
#define  kMinShakeInterval 0.1
#define  kShakeAccelerationThreshold 0.2
-(CMMotionManager*) motionManager{
    if (_motionManager==nil) {
        _motionManager=[[CMMotionManager alloc] init];
        _motionManager.accelerometerUpdateInterval=1.0/25;
        _motionManager.gyroUpdateInterval=1.0/25;
    }
    return _motionManager;
}
-(void) viewDidLoad{
   [...]
   [[self motionManager] startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
                                           withHandler:^(CMAccelerometerData  *accelerometerData, NSError *error) {
                                               [self didAccelerate:accelerometerData.acceleration];
                                               if(error){
                                                   NSLog(@"%@", error);
                                               }
                                           }];
    [...]
}

- (void)didAccelerate:(CMAcceleration)acceleration{
    UIAccelerationValue lenght, x, y, z;
    accelX=acceleration.x*kFilteringFactor + accelX * (1.0 - kFilteringFactor);
    accelY=acceleration.y*kFilteringFactor + accelY * (1.0 - kFilteringFactor);
    accelZ=acceleration.z*kFilteringFactor + accelZ * (1.0 - kFilteringFactor);

    x=acceleration.x - accelX;
    y=acceleration.y - accelY;
    z=acceleration.z - accelZ;

    lenght=sqrt(x*x + y*y + z*z);
    if (lenght>=kShakeAccelerationThreshold && (CFAbsoluteTimeGetCurrent()>lastTime + kMinShakeInterval)){
    //execute shaking actions on main thread
    }
}

您可以读取加速计输出。任何示例..或要共享的链接。任何示例或要共享的链接。在这种情况下,“lastTime”是什么。我忘记了:它是在对我的应用程序执行某些特定操作后在条件块中设置的:lastTime=CFAbsoluteTimeGetCurrent();这是一个CFTimeInterval lastTime;