如何使用滑块更改 mapkit 地图视图缩放级别?
Posted
技术标签:
【中文标题】如何使用滑块更改 mapkit 地图视图缩放级别?【英文标题】:How to change mapkit map view zoom-level with a slider? 【发布时间】:2016-06-20 01:36:35 【问题描述】:所以我的故事板中有一个地图视图(基于 mapkit)和一个滑块。当用户滑动时,地图会根据他们的动作放大或缩小。我该如何实施?我认为这可能与 longitudeDelta 和 latitudeDelta 有关。
请帮帮我。
import UIKit
import MapKit
import CoreLocation
class ConfigureViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate
@IBOutlet weak var mapkitView: MKMapView!
@IBOutlet weak var travelRadius: UILabel!
@IBAction func button(sender: AnyObject)
@IBAction func sliderChanged(sender: AnyObject)
let sliderValue = lrintf(sender.value)
travelRadius.text = "\(sliderValue) mi."
let delta = Double(self.sliderChanged(sender.value))
var currentRegion = self.mapkitView.region
currentRegion.span = MKCoordinateSpan(latitudeDelta: delta, longitudeDelta: delta)
self.mapkitView.region = currentRegion
let locationManager = CLLocationManager()
@IBOutlet weak var mapKitView: MKMapView!
override func viewDidLoad()
super.viewDidLoad()
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
self.mapKitView.showsUserLocation = true
// Do any additional setup after loading the view.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
let location = locations.last
let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1.5,
longitudeDelta: 1.5))
self.mapKitView.setRegion(region, animated: false)
self.locationManager.stopUpdatingLocation()
func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
print ("Errors:" + error.localizedDescription)
Screenshot of my storyboard
【问题讨论】:
【参考方案1】:您通过mapView
的region
属性设置缩放。它定义了地图的中心点和跨度(即缩放级别)
编辑
帮自己一个忙,为滑块定义一个单独的IBOutlet
。事实证明,您的滑块以英里为单位,但跨度以纬度和经度为单位。 1 纬度/经度以英里计的长度取决于您在地球上的位置。***对latitude 和longitude 进行了一些讨论。 假设您在赤道上,换算为每度 69 英里。
(记得连接插座)
class ViewController: UIViewController
@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var travelRadius: UILabel!
@IBOutlet weak var currentLocationLabel: UILabel!
override func viewDidLoad()
super.viewDidLoad()
sliderChanged(self) // Set the correct zoom according to the slider initial value
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
@IBAction func sliderChanged(sender: AnyObject)
let miles = Double(self.slider.value)
let delta = miles / 69.0
var currentRegion = self.mapView.region
currentRegion.span = MKCoordinateSpan(latitudeDelta: delta, longitudeDelta: delta)
self.mapView.region = currentRegion
travelRadius.text = "\(Int(round(miles))) miles"
let (lat, long) = (currentRegion.center.latitude, currentRegion.center.longitude)
currentLocationLabel.text = "Current location: \(lat), \(long))"
【讨论】:
感谢您的回答,我认为这是解决此问题的正确方向。但是我的应用程序在模拟器中崩溃了,我在 let delta = Double(self.changeView(sender.value)) 线上得到了一个线程,名为 Exc_Bad_Access(code=1, address=0x198)self.changeView
是什么?
哦,对不起,它是“self.sliderChanged”。还有一件事我没有提到,如果你查看我的故事板截图,这个滑块还控制标签文本,你知道,当用户滑动时,他们会看到数量增加。我将在问题字段中更新我的代码。哦,还有一件事,我也想在中心显示用户的当前位置。
“当前位置”,如 GPS 坐标或城市名称,如“芝加哥,伊利诺伊州,美国”?
GPS坐标,你在按钮上看到功能位置管理器,这就是我在地图上将用户位置居中的创意。以上是关于如何使用滑块更改 mapkit 地图视图缩放级别?的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何将地图视图的缩放级别设置为当前位置周围 1 公里半径?