gpt4 book ai didi

iphone - 如何确定 iPhone 晃动的方向

转载 作者:行者123 更新时间:2023-12-03 19:04:54 24 4
gpt4 key购买 nike

我正在使用加速度计滚动 UIScrollVIew 中的多个 subview 。我希望当用户向右滑动 iPhone 时 View (纵向)向右滚动,并在向左滑动设备时向左滚动。

我认为我可以通过记下正或负 x 加速度值来做到这一点,但我发现这些值通常是正值和负值的混合。我已将下限设置为 1.5g,以消除无抖动运动,并查看 0.5 秒持续时间内的 x 值。

我确信有一种三角方法可以确定轻弹的整体方向,并且您必须在轻弹运动的持续时间内测量值。我也确信有人已经解决了这个问题。

有什么想法吗?

谢谢

最佳答案

我开发了一个解决方案,它比建议的解决方案给了我更好的反馈(仅适用于左右摇动)。我在这里所做的方式非常敏感(识别轻微的震动),但是可以通过更改 tresholdFirstMove 和 tresholdBackMove 来调整灵敏度(增加以降低灵敏度)

在 swift 中:(在你的 viewController 中。并添加“import CoreMotion”)

var startedLeftTilt = false
var startedRightTilt = false
var dateLastShake = NSDate(timeIntervalSinceNow: -2)
var dateStartedTilt = NSDate(timeIntervalSinceNow: -2)
var motionManager = CMMotionManager()
let tresholdFirstMove = 3.0
let tresholdBackMove = 0.5

override func viewDidLoad() {
// your code

motionManager.gyroUpdateInterval = 0.01
}

override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)

motionManager.startGyroUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler: { (gyroData, error) -> Void in
self.handleGyroData(gyroData.rotationRate)
})

}

private func handleGyroData(rotation: CMRotationRate) {

if fabs(rotation.z) > tresholdFirstMove && fabs(dateLastShake.timeIntervalSinceNow) > 0.3
{
if !startedRightTilt && !startedLeftTilt
{
dateStartedTilt = NSDate()
if (rotation.z > 0)
{
startedLeftTilt = true
startedRightTilt = false
}
else
{
startedRightTilt = true
startedLeftTilt = false
}
}
}

if fabs(dateStartedTilt.timeIntervalSinceNow) >= 0.3
{
startedRightTilt = false
startedLeftTilt = false
}
else
{
if (fabs(rotation.z) > tresholdBackMove)
{
if startedLeftTilt && rotation.z < 0
{
dateLastShake = NSDate()
startedRightTilt = false
startedLeftTilt = false

println("\\\n Shaked left\n/")
}
else if startedRightTilt && rotation.z > 0
{
dateLastShake = NSDate()
startedRightTilt = false
startedLeftTilt = false

println("\\\n Shaked right\n/")
}
}
}

}

关于iphone - 如何确定 iPhone 晃动的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com