按下按钮居中\将MKmapView聚焦到用户的位置,Swift



我的代码:

拜托了!如何使这个按钮工作!?

我在@IBAction括号中放入什么来获得我想要的函数?

    import UIKit
    import MapKit
    import CoreLocation
class MapViewController: UIViewController,MKMapViewDelegate, CLLocationManagerDelegate{

        @IBOutlet weak var mapView: MKMapView!

        let locationManager = CLLocationManager()
        override func viewDidLoad() {
            super.viewDidLoad()
            //==========RegionLocation : =========
            // Init the zoom level
            let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 31.30, longitude: 34.45)
            let span = MKCoordinateSpanMake(125, 125)
            let region = MKCoordinateRegionMake(coordinate, span)
            self.mapView.setRegion(region, animated: true)

            //====================================\
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        //Dispose of resources that can be re created.
            }
        //Mark : Location
        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: 0.06, longitudeDelta: 0.06))
            self.mapView.setRegion(region, animated: true)
            self.locationManager.stopUpdatingLocation()
        }
        func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
        {
            print("Errors: " + error.localizedDescription)
        }
        func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
            if annotation is MKUserLocation {
                return nil
            }
            let reuseID = "pin"
            var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseID) as? MKPinAnnotationView
            if(pinView == nil) {
                pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID)
                pinView!.canShowCallout = true
                pinView!.animatesDrop = true
                pinView!.rightCalloutAccessoryView = UIButton(type: UIButtonType.DetailDisclosure) as UIButton
                let smallSquare = CGSize(width: 30, height: 30)
                let button = UIButton(frame: CGRect(origin: CGPointZero, size: smallSquare))
                button.setBackgroundImage(UIImage(named: "Car"), forState: .Normal)
                pinView?.leftCalloutAccessoryView = button
            }
            else
            {
                pinView!.annotation = annotation
            }

        return pinView
    }

但是当我放入按钮动作段时,当我按下它时什么都没有发生?

任何人都可以指导我如何将mapView居中到用户位置蓝点上?

试试这个

@IBAction func centerLocationButton(sender: UIButton) {
    mapView.setCenterCoordinate(mapView.userLocation.coordinate, animated: true)
}

为了正确使用MKMapView,只需遵循以下代码。

// `viewDidLoad` method
@IBOutlet weak var map: MKMapView!
var locationManager: CLLocationManager!
override func viewDidLoad() {
        super.viewDidLoad()
        // code for enable location seivices
        if (CLLocationManager.locationServicesEnabled())
        {
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
        }
    }

覆盖CLLocationManager。didUpdateLocations见下面(CLLocationManagerDelegate的一部分),以便在位置管理器检索当前位置时获得通知。

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    let location = locations.last as CLLocation
    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)        
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
    self.map.setRegion(region, animated: true)
}

有一个注释:如果你的目标是iOS 8,你必须在你的Info中包含NSLocationAlwaysUsageDescription键。

如果您想使用按钮动作以自定义方式设置区域,只需保存latlong并像这样传递:

@IBAction func setMap(sender: UIButton) {
    let center = CLLocationCoordinate2D(latitude: lat, longitude: long)        
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
    self.map.setRegion(region, animated: true)
}

这里是谷歌地图指南。和有用的教程

我可以看到你需要的是有一个按钮来将mapView居中到当前位置。这和vaibhab的回答完全一样,只是有一点修改。只需创建按钮,并将操作链接到视图控制器类,然后将相同的代码复制到按钮的IBAction中。

@IBAction func updateCurrentLocation(_ sender: AnyObject) {
    if CLLocationManager.locationServicesEnabled() {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
    } else {
        // Alert to enable location services on iphone first
    }
}

另外,您可以添加一小行代码来显示用户位置的蓝色指示器。在locationManager.

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
    self.mapView.showsUserLocation = true
}

确保当你使用模拟器时,从模拟器菜单中添加一个自定义位置。调试->位置---->自定义如果使用真正的手机,请确保在设置->常规---->隐私

中打开位置服务。

相关内容

  • 没有找到相关文章

最新更新