有没有更好的方法来处理来自CLLocationManager的压倒性标题数据以呈现在UI上?

时间:2017-04-30 09:44:42

标签: ios swift calayer cllocationmanager

我可以从CLLocationManager获取标题数据。

    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.headingFilter = 0.2
    locationManager.headingOrientation =  CLDeviceOrientation.landscapeRight
    locationManager.startUpdatingHeading()
    locationManager.delegate = self

我可以用

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    let headingDegree = newHeading.trueHeading
    // Keep update CALayer
    scrollLayer.scroll(to: CGPoint(x: headingDegree, y: 20.0))
}

更新用户界面。用户界面是CAScrollLayer顶部的标题点击。

问题:

当iPhone偏航太快时,标题磁带一直在摇晃。我相信滚动活动不够快,无法处理压倒性的标题数据。

问题:

有没有更好的方法来处理使用CAScrollLayer的标题更新数据?

1 个答案:

答案 0 :(得分:0)

听起来你需要一些平滑的地方。要清楚,平滑(以其最基本的形式)是随着时间的推移取平均值。我们假设您想要获取最近60次左右更新的平均值,那么您将拥有一组用于计算平均值的值:

var arr: [Double] = []

func average(latestVal: Double) -> Double
{
    if arr.count >= 60 {
        arr.remove(at: 0)
    }
    arr.append(latestVal)

    let total = arr.reduce(0, { $0 + $1 })

    return total / Double(arr.count)
}

这确实是在Swift中实现队列的绝佳机会,您可以在here找到详细信息。