Моя кнопка, которую я создал программно, чтобы вытолкнуть из моего приложения приложение Apple Maps, перестала работать .. почему? - PullRequest
0 голосов
/ 11 октября 2018

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

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)

    }


}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...