2017-08-08 44 views
1

我试图在屏幕加载时自动启动地图。在屏幕加载时启动地图功能。 iOS,Swift

可以这样做吗?在视图确实出现时启动此功能。

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 

    if let anno = view.annotation { 
     let place = MKPlacemark(coordinate: anno.coordinate) 
     let destination = MKMapItem(placemark: place) 
     destination.name = "Vehicle Sighting" 
     let regionDistance: CLLocationDistance = 1000 
     let regionSpan = MKCoordinateRegionMakeWithDistance(anno.coordinate, regionDistance, regionDistance) 

     let options = [MKLaunchOptionsMapCenterKey: NSValue (mkCoordinate: regionSpan.center), MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span), MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving] as [String : Any] 

     MKMapItem.openMaps(with: [destination], launchOptions: options) 
    } 
} 
+0

您不会启动*该功能*。你可以创建一个地图项并打开它。在'viewDidAppear'中执行会很奇怪,因为用户体验会出现一个新的视图,然后地图应用程序打开。从前一个视图控制器打开地图会更明智。 – Paulw11

回答

1

尝试使用此功能,您只需要通过坐标和地名,这个工作,我在几个项目中使用这个

static func openMapsAppWithLocation(coordinates:CLLocationCoordinate2D,placeName:String) 
{ 
    let regionDistance:CLLocationDistance = 10000 
    let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance) 
    let options = [ 
     MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center), 
     MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span) 
    ] 
    let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) 
    let mapItem = MKMapItem(placemark: placemark) 
    mapItem.name = placeName 
    mapItem.openInMaps(launchOptions: options) 
} 

希望这会使用帮助

+1

这工作的魅力@Reinier,谢谢你,我可以实现这个int eh控制器之前,无需加载一个新的视图与地图上。感谢您的时间。 –

+0

@TonyMerritt你只需要一个名称和一个坐标,你不需要加载地图,甚至UIViewController,我在我的AppManager单例中使用这个代码作为静态函数,你可以看到并且工作得很完美 –

+1

是的这是一个更好的结果比我所寻找的要麻烦的是去另一个控制器加载地图视图,然后从那里去地图。这种方式是完美的。 –

0

的替代版本@Reinier回答。

这显示了它如何实现到视图控制器的操作之前,无需转到下一个控制器以在视图中启动执行加载。另外我如何从邮政编码获得坐标

var addressCode = [[String: Double]]() 


@IBAction func onMapPressed(_ sender: Any) { 

    let address = postCode 
     let geocoder = CLGeocoder() 
     geocoder.geocodeAddressString(address) { 
      placemarks, error in 
      let placemark = placemarks?.first 
      let lat = placemark?.location?.coordinate.latitude 
      let lon = placemark?.location?.coordinate.longitude 
      //   let locationTitle = self.places] 
      let latLon = ["latitude":lat!, "longitude": lon!] 
      self.addressCode.append(latLon) 

      for location in self.addressCode { 
       let annotation = MKPointAnnotation() 
       annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"]!, longitude: location["longitude"]!) 


       self.openMapsAppWithLocation(coordinates: annotation.coordinate, placeName: self.makeLabel.text!) 
    } 
} 
}