Swift 2.0 locationManager刷新视图但在视图加载后不会保持静止

时间:2016-02-08 03:59:23

标签: swift mkmapview

我正在开发一款仅显示半径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
}

}

1 个答案:

答案 0 :(得分:0)

每次调用位置更改didUpdateLocations时,如果距离至少是为distanceFilter指定的距离。由于您尚未设置此值,因此默认值为kCLDistanceFilterNone。这意味着每次轻微的更改都会导致调用该函数,并且该代码会使用setRegion重置该区域。

您可以使用distanceFilter仅在位置发生重大变化时重置区域,和/或检测用户是否放大了屏幕,并使用当前的“跨度”而不是将其重置为(0.05,0.05) )。