如何使用滑块更改 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】:

您通过mapViewregion 属性设置缩放。它定义了地图的中心点和跨度(即缩放级别)


编辑

帮自己一个忙,为滑块定义一个单独的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 地图视图缩放级别?的主要内容,如果未能解决你的问题,请参考以下文章

具有多个缩放级别的 UIScrollView?

mapkit 地图视图幻灯片滑动到并放大效果?

Android:如何将地图视图的缩放级别设置为当前位置周围 1 公里半径?

如何设置地图视图的缩放级别,使三个引脚可见?

MapKit 在 XCode 4.6 中滚动地图时更改注释视图顺序

苹果 mapkit 地图样式 - 使用分段控制器实现样式更改 [关闭]