我的iOS应用程序中有一个普通的地图,其中“显示用户位置”已启用 - 这意味着我在地图上有我的正常蓝点,显示我的位置和准确度信息。代码中禁用了标注。
但我也有定制的MKAnnotationViews,它们在地图上绘制,所有这些都有自定义标注。
这很好用,但问题是当我的位置在MKAnnotationView的位置时,蓝点(MKUserLocation)会拦截触摸,因此MKAnnotationView不会被触及。
如何禁用蓝点上的用户交互,以便MKAnnotationViews而不是蓝点拦截触摸?
这是我到目前为止所做的事情:
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation;
{
if (annotation == self.mapView.userLocation)
{
[self.mapView viewForAnnotation:annotation].canShowCallout = NO;
return [self.mapView viewForAnnotation:annotation];
} else {
...
}
}
答案 0 :(得分:15)
禁用标注不会禁用视图上的触摸(didSelectAnnotationView
仍会被调用)。
要在注释视图上禁用用户互动,请将其enabled
属性设置为NO
。
但是,我建议不要在enabled
委托方法中将NO
设置为viewForAnnotation
,而是建议使用didAddAnnotationViews
委托方法,而不是viewForAnnotation
,只需为nil
返回MKUserLocation
。
示例:
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation;
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
return nil;
}
//create annotation view for your annotation here...
}
-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
MKAnnotationView *av = [mapView viewForAnnotation:mapView.userLocation];
av.enabled = NO; //disable touch on user location
}
答案 1 :(得分:0)
Swift 4.2 Example:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
// Add custom annotation views here.
}
func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
// Grab the user location annotation from your IB Outlet map view.
let userLocation = mapView.view(for: mapView.userLocation)
userLocation?.isEnabled = false
}