Почему моя кнопка не переходит от моего приложения к Apple Maps? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть приложение для навигации, над которым я работаю, которое работает как приложение для карт нормалей, позволяя вам искать местоположения с помощью таблицы поиска и т. Д. В приложении пользователь может создавать аннотации, щелкая нужный результат из моего поиска,ВОПРОС: Когда пользователь нажимает на аннотацию, над ней должна появиться всплывающая кнопка, так как я создал ее программно.После щелчка он должен подтолкнуть пользователя к приложению Apple Maps с маршрутом к аннотации, по которой он щелкнул, предварительно загруженной. Это меня больше не подталкивает, что странно, потому что раньше это работало.Вот программно созданная кнопка:

extension ViewController : MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?{
    if annotation is MKUserLocation {
        //return nil so map view draws "blue dot" for standard user location
        return nil
    }
    let reuseId = "pin"
    var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView
    pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
    pinView?.pinTintColor = UIColor.red
    pinView?.canShowCallout = true
    let smallSquare = CGSize(width: 30, height: 30)
    let button = UIButton(frame: CGRect(origin: (CGPoint()), size: smallSquare))
    button.setBackgroundImage(UIImage(named: "car"), for: [])
    button.addTarget(self, action: #selector(getDirections), for: UIControlEvents.touchUpInside)

    pinView?.leftCalloutAccessoryView = button
    return pinView
}
}

, и это должно выполнить ее (в классе)

@objc func getDirections(){
if let selectedPin = selectedPin {
    let mapItem = MKMapItem(placemark: selectedPin)
    let launchOptions = [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving]
    mapItem.openInMaps(launchOptions: launchOptions)
}
}

Может ли быть что-то странное с целевой функцией C?Этот код, который я недавно добавил, потенциально мог вызвать проблему, хотя я действительно не знаю:

func resolveAddress(for averageCoordinate: CLLocationCoordinate2D, completion: @escaping (MKPlacemark?) -> () ) {

    let geocoder = CLGeocoder()
    let averageLocation = CLLocation(latitude: averageCoordinate.latitude, longitude: averageCoordinate.longitude)
    geocoder.reverseGeocodeLocation(averageLocation) { (placemarks, error) in
        guard error == nil,
            let placemark = placemarks?.first
        else {
            completion(nil)
            return
        }
        completion(MKPlacemark(placemark: placemark ))
    }
}

@IBAction func middleFinderButton(_ sender: Any) {

    let totalLatitude = mapView.annotations.reduce(0) { $0 + $1.coordinate.latitude }

    let totalLongitude = mapView.annotations.reduce(0) { $0 + $1.coordinate.longitude }

    let averageLatitude = totalLatitude/Double(mapView.annotations.count)

    let averageLongitude = totalLongitude/Double(mapView.annotations.count)

    let centerPoint = MKPointAnnotation()

    centerPoint.coordinate.latitude = averageLatitude
    centerPoint.coordinate.longitude = averageLongitude


    mapView.addAnnotation(centerPoint)

    resolveAddress(for: centerPoint.coordinate) { placemark in
        if let placemark = placemark {
            self.mapView.addAnnotation(placemark)
        } else {
            self.mapView.addAnnotation(centerPoint)
        }
    }

    print(totalLatitude)
    print(totalLongitude)
    print(averageLatitude)
    print(averageLongitude)
    print(centerPoint.coordinate)

    }

ссылка на github: github.com/derekvandermark/VHNavigationAppOfficial-v-0.93

У кого-нибудь есть идея, почему эта кнопка не работает, и приложение перемещается на карты с заранее заданным маршрутом?может ли это быть сбой с симулятором (раньше он работал, поэтому я сомневаюсь в этом)?Спасибо.

1 Ответ

0 голосов
/ 16 октября 2018

, чтобы подтолкнуть пользователя к приложению карт, вы можете попробовать это:

func openMap(lat: String, lng: String){

    let lat1 : NSString = lat as NSString
    let lng1 : NSString = lng as NSString

    let latitude:CLLocationDegrees =  lat1.doubleValue
    let longitude:CLLocationDegrees =  lng1.doubleValue

    let regionDistance:CLLocationDistance = 10000
    let coordinates = CLLocationCoordinate2DMake(latitude, longitude)
    let regionSpan = MKCoordinateRegion(center: coordinates, latitudinalMeters: regionDistance, longitudinalMeters: 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.openInMaps(launchOptions: options)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...