我正在开发一款仅显示半径30英里范围内的注释的应用。我可以让那部分工作。在加载时,它会缩小到当前位置。我可以放大/缩小,但如果没有立即放大/缩小,它会缩放回原来的区域视图。
我已经在互联网和这个网站上寻找解决方案,但没有一个是足够的。我下面的代码不包含注释,但会复制我遇到的问题。
我发现的一个建议是使用locationManager.requestLocation
代替.startUpdatingLocations
,但这只会让它崩溃。
import MapKit
import UIKit
import CoreLocation
import Foundation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate{
@IBOutlet weak var mapView: MKMapView!
var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLoction: CLLocation = locations[0]
let latitude = userLoction.coordinate.latitude
let longitude = userLoction.coordinate.longitude
let latDelta: CLLocationDegrees = 0.05
let lonDelta: CLLocationDegrees = 0.05
let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta)
let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span)
self.mapView.setRegion(region, animated: true)
self.mapView.showsUserLocation = true
}
}
答案 0 :(得分:0)
每次调用位置更改didUpdateLocations
时,如果距离至少是为distanceFilter
指定的距离。由于您尚未设置此值,因此默认值为kCLDistanceFilterNone
。这意味着每次轻微的更改都会导致调用该函数,并且该代码会使用setRegion
重置该区域。
您可以使用distanceFilter
仅在位置发生重大变化时重置区域,和/或检测用户是否放大了屏幕,并使用当前的“跨度”而不是将其重置为(0.05,0.05) )。