在 MapKit 中禁用 Mylocation Marker Tap Swift
Disable Mylocation Marker Tap in MapKit Swift
我正在 Apple 地图中添加 MKAnnotationView 并在 annotationView.But 中创建点击事件 Mylocation 标记正在与 annotationView tap.How 交互以克服此问题 problem.Hope 你了解我的 problem.Thanks提前。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var annotationView = MKAnnotationView()
guard let annotation = annotation as? ClientLocation
else{
return nil
}
if let dequedView = mapView.dequeueReusableAnnotationView(withIdentifier: annotation.identifier){
annotationView = dequedView
}
else{
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotation.identifier)
}
////////////////////////
///////////////////
annotationView.rightCalloutAccessoryView = button
annotationView.canShowCallout = true
return annotationView
}
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
}
您可以使用 MKMapViewDelegate
中的委托方法 viewFor annotation
自定义注释视图。
编辑:
我只是想重现你的代码,让我怀疑的只是你的 class ClientLocation
。如果你的 guard let
return nil 你必须检查这个声明。
您需要做的是检查 class 来自您的代表的视图类型,例如:
if annotation.isKind(of: MKUserLocation.self) {
// this means we are handling the blue point or the user location.
//then you can set the parameters for this view like
annotationView.canShowCallout = false
// or even unable user to interact with
annotationView.isUserInteractionEnabled = false
}
您的委托应如下所示:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?{
var annotationView = MKAnnotationView()
guard let annotation = annotation as? ClientLocation
else{
return nil
}
if let dequedView = mapView.dequeueReusableAnnotationView(withIdentifier: annotation.identifier){
annotationView = dequedView
}
else{
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotation.identifier)
}
if annotation.isKind(of: MKUserLocation.self) {
annotationView.isUserInteractionEnabled = false
}
////////////////////////
///////////////////
annotationView.rightCalloutAccessoryView = button
annotationView.canShowCallout = true
return annotationView
}
在你的代表身上
public func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
let userView = mapView.view(for: mapView.userLocation)
userView?.isUserInteractionEnabled = false
userView?.isEnabled = false
userView?.canShowCallout = false
}
它对我有用。试试这个
override func viewDidLoad() {
super.viewDidLoad()
mapView.userLocation.title = nil
}
我正在 Apple 地图中添加 MKAnnotationView 并在 annotationView.But 中创建点击事件 Mylocation 标记正在与 annotationView tap.How 交互以克服此问题 problem.Hope 你了解我的 problem.Thanks提前。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var annotationView = MKAnnotationView()
guard let annotation = annotation as? ClientLocation
else{
return nil
}
if let dequedView = mapView.dequeueReusableAnnotationView(withIdentifier: annotation.identifier){
annotationView = dequedView
}
else{
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotation.identifier)
}
////////////////////////
///////////////////
annotationView.rightCalloutAccessoryView = button
annotationView.canShowCallout = true
return annotationView
}
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
}
您可以使用 MKMapViewDelegate
中的委托方法 viewFor annotation
自定义注释视图。
编辑:
我只是想重现你的代码,让我怀疑的只是你的 class ClientLocation
。如果你的 guard let
return nil 你必须检查这个声明。
您需要做的是检查 class 来自您的代表的视图类型,例如:
if annotation.isKind(of: MKUserLocation.self) {
// this means we are handling the blue point or the user location.
//then you can set the parameters for this view like
annotationView.canShowCallout = false
// or even unable user to interact with
annotationView.isUserInteractionEnabled = false
}
您的委托应如下所示:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?{
var annotationView = MKAnnotationView()
guard let annotation = annotation as? ClientLocation
else{
return nil
}
if let dequedView = mapView.dequeueReusableAnnotationView(withIdentifier: annotation.identifier){
annotationView = dequedView
}
else{
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotation.identifier)
}
if annotation.isKind(of: MKUserLocation.self) {
annotationView.isUserInteractionEnabled = false
}
////////////////////////
///////////////////
annotationView.rightCalloutAccessoryView = button
annotationView.canShowCallout = true
return annotationView
}
在你的代表身上
public func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
let userView = mapView.view(for: mapView.userLocation)
userView?.isUserInteractionEnabled = false
userView?.isEnabled = false
userView?.canShowCallout = false
}
它对我有用。试试这个
override func viewDidLoad() {
super.viewDidLoad()
mapView.userLocation.title = nil
}