我可以从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的标题更新数据?
答案 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找到详细信息。