Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有默认地图视图接点的Swift Mapview自定义调出视图_Ios_Swift_Mapkit_Mapkitannotation_Mkpointannotation - Fatal编程技术网

Ios 带有默认地图视图接点的Swift Mapview自定义调出视图

Ios 带有默认地图视图接点的Swift Mapview自定义调出视图,ios,swift,mapkit,mapkitannotation,mkpointannotation,Ios,Swift,Mapkit,Mapkitannotation,Mkpointannotation,我相信这将是一个非常简单的答案,但我一直在试图找出如何添加带有地图视图默认接点的自定义详图索引视图。在我当前的代码中,我似乎只能添加一个图像作为MKPointAnnotation,而不是默认的pin。第一个“viewFor annotation”是我如何设置默认管脚的,而下面的所有内容都是用于自定义调出视图。。。我想做的是让我的自定义调出视图具有默认的管脚。如果我想要自定义调出视图,是否必须添加自定义图像pin func mapView(_ mapView: MKMapView, viewFor

我相信这将是一个非常简单的答案,但我一直在试图找出如何添加带有地图视图默认接点的自定义详图索引视图。在我当前的代码中,我似乎只能添加一个图像作为MKPointAnnotation,而不是默认的pin。第一个“viewFor annotation”是我如何设置默认管脚的,而下面的所有内容都是用于自定义调出视图。。。我想做的是让我的自定义调出视图具有默认的管脚。如果我想要自定义调出视图,是否必须添加自定义图像pin

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()
        }
    }
}

您不需要添加子视图calloutView。您可以使用
MKAnnotationView
作为自定义详图索引

e、 g.您应该安排源代码

实现
MKAnnotation
MKAnnotationView
的子类

class PinAnnotation : NSObject, MKAnnotation {
    var coordinate : CLLocationCoordinate2D
    var title: String?
    var calloutAnnotation: CustomBusinessCallOut?

    init(location coord:CLLocationCoordinate2D) {
        self.coordinate = coord
        super.init()
    }
}

class CustomBusinessCallOut : NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var title: String?

    init(location coord:CLLocationCoordinate2D) {
        self.coordinate = coord
        super.init()
    }
}

class CalloutAnnotationView : MKAnnotationView {
}
实现mapView委托方法

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

    if annotation is PinAnnotation {
        let reuseId = "Pin"
        var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView
        if pinView == nil {
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        }
        else {
            pinView?.annotation = annotation
        }

        return pinView
    } else if annotation is CustomBusinessCallOut {
        let reuseId = "Callout"
        var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
        if pinView == nil {
            pinView = CalloutAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            pinView?.addSubview(UIImageView(image: UIImage(named: "car")))
        }
        else {
            pinView?.annotation = annotation
        }

        return pinView
    } else {
        return nil
    }
}

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    guard view.annotation is PinAnnotation else { return }
    if let pinAnnotation = view.annotation as? PinAnnotation {
        let calloutAnnotation = CustomBusinessCallOut(location: pinAnnotation.coordinate)
        calloutAnnotation.title = pinAnnotation.title
        pinAnnotation.calloutAnnotation = calloutAnnotation
        mapView.addAnnotation(calloutAnnotation)
    }
}

func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
    guard view.annotation is PinAnnotation else { return }
    if let pinAnnotation = view.annotation as? PinAnnotation,
        let calloutAnnotation = pinAnnotation.calloutAnnotation {
        mapView.removeAnnotation(calloutAnnotation)
        pinAnnotation.calloutAnnotation = nil
    }
}

您可以使用
annotationView.detailCalloutAccessoryView