3

これは非常に簡単な答えになると思いますが、マップ ビューのデフォルト ピンを使用してカスタム コールアウト ビューを追加する方法を理解しようとしています。私の現在のコードでは、デフォルトのピンの代わりに MKPointAnnotation としてのみ画像を追加できるようです。この最初の「viewFor 注釈」は、デフォルトのピンを設定する方法ですが、その下にあるものはすべてカスタム コール アウト ビュー用です...私がしようとしているのは、カスタム コール アウト ビューにデフォルトのピンを設定することです。カスタム コールアウト ビューが必要な場合、カスタム イメージ ピンを追加する必要がありますか?

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation { return nil }

    if let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "") {
        annotationView.annotation = annotation
        return annotationView
    } else {
        let annotationView = MKPinAnnotationView(annotation:annotation, reuseIdentifier:"")
        annotationView.isEnabled = true
        annotationView.canShowCallout = true

        let btn = UIButton(type: .detailDisclosure)
        annotationView.rightCalloutAccessoryView = btn
        return annotationView
    }
}


func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if annotation is MKUserLocation { return nil }
    var annotationView = self.mapView.dequeueReusableAnnotationView(withIdentifier: "Pin")
    if annotationView == nil{
        annotationView = CustomBusinessCallOutAnnotatiion(annotation: annotation, reuseIdentifier: "Pin")
        annotationView?.canShowCallout = false
    }else{
        annotationView?.annotation = annotation
    }
    annotationView?.image = UIImage(named: "car")
    return annotationView
}

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

    if view.annotation is MKUserLocation { return }

    let customAnnotation = view.annotation as! CustomBusinessPoint
    let views = Bundle.main.loadNibNamed("CustomBusinessCallOut", owner: nil, options: nil)
    let calloutView = views?[0] as! CustomBusinessCallOut


    calloutView.businessName.text = customAnnotation.businessName
    calloutView.businessStreet.text = customAnnotation.businessStreet
    calloutView.businessState.text = customAnnotation.businessState
    calloutView.businessDistance.text = customAnnotation.businessDistance


    calloutView.center = CGPoint(x: view.bounds.size.width / 2, y: -calloutView.bounds.size.height * -0.0001)
    view.addSubview(calloutView)
    mapView.setCenter((view.annotation?.coordinate)!, animated: true)
}

func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
    if view.isKind(of: CustomBusinessCallOutAnnotatiion.self) {
        for subview in view.subviews {
            subview.removeFromSuperview()
        }
    }
}
4

1 に答える 1