gpt4 book ai didi

iOS locationManager - 汽车仪表延迟

转载 作者:搜寻专家 更新时间:2023-11-01 06:22:49 26 4
gpt4 key购买 nike

我正在尝试制作一款可以在仪表(例如汽车)上显示您的速度(速度)的应用。我遇到的问题是 CLlocationManager 委托(delegate)方法 didUpdateLocations 每秒只让我读取一次位置和速度,所以如果我加速汽车太快,我会延迟仪表上的指针位置。例如:我得到 13 m/s 的速度,一秒钟后我得到 26 m/s,因此 UI 中的指针变为 13 m/s 并在那里等待一秒钟,然后才变为 26 m/s。所以我在 UI 中得到了非连续的指针移动。

通过阅读其他问题,我了解到我无法控制从 CLlocation 获得的采样率,并且我无法告诉他每 0.25 秒(使用不同的值)给我一次读取。1.是真的吗?2. 我该如何解决才能让用户看起来不错?

//in viewdidload:
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
self.locationManager.distanceFilter = kCLDistanceFilterNone

if versionNum == 8 {
self.locationManager.requestAlwaysAuthorization()
}

self.locationManager.startUpdatingLocation()

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
println(locations)

var loc = locations.last as! CLLocation
var speed = loc.speed

var time = loc.timestamp

var hour = getCurrentHour(time)
println("hour inside manager: \(hour)")
if hour == 18 && self.isItDay {
self.currentTimeHour = hour
self.setDayBool()
self.setRightImg()
}
else if hour == 6 && !self.isItDay {
self.currentTimeHour = hour
self.setDayBool()
self.setRightImg()
}

if self.unit == "MPH" {
speed = speed * 3.280839895013123
}

if speed >= 0 {
self.speedLabel.text = "\(Int(speed))"
self.animateNeedle(CGFloat(speed))
}

println("speed: \(speed)")

}
func animateNeedle(speed : CGFloat) {

var rotation : CGFloat = 0

if self.unit == "KMH" {
rotation = (speed * 4) - 5
}
else if self.unit == "MPH" {
rotation = speed + ((speed / 3) - 5)
}

if let trans = self.needleImg.layer.presentationLayer() {
self.currentValue = self.needleImg.layer.presentationLayer().valueForKeyPath("transform.rotation") as! Float
}

println(currentValue)

let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
rotateAnimation.fillMode = kCAFillModeBoth
rotateAnimation.removedOnCompletion = false
rotateAnimation.fromValue = currentValue
rotateAnimation.toValue = self.degToRad(rotation)
rotateAnimation.duration = 0.3
self.needleImg.layer.addAnimation(rotateAnimation, forKey: "transform.rotation")
}

最佳答案

正如 Lefteris 所说,您应该将距离过滤器设置为 0。您还应该选择 kCLLocationAccuracyBest 作为位置管理器的 desiredAccuracy 属性。

iOS GPS 在任何情况下都相当粗糙,所以我怀疑这些东西中的任何一个是否会有很大帮助。

我建议将速度计指针从旧位置设置为新位置的动画。 0.2 - 0.3 秒的持续时间应该足以产生运动的印象,而不会花费太长时间以干扰保持针位置当前。

您可以使用 UIView 动画方法,例如 animateWithDuration:animations 或 Core Animation。 Core Animation 更难使用,但提供了更多选项。

关于iOS locationManager - 汽车仪表延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30347389/

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