gpt4 book ai didi

ios - MKUserLocation 是可选择的,错误地拦截来自自定义 MKAnnotationViews 的触摸

转载 作者:可可西里 更新时间:2023-11-01 03:27:16 25 4
gpt4 key购买 nike

我的 iOS 应用程序中有一张法线 map ,其中启用了“显示用户位置”——这意味着我在 map 上有我的法线蓝点,显示我的位置和精度信息。标注在代码中被禁用。

但我也有自定义的 MKAnnotationViews,它们被绘制在 map 周围,它们都有自定义标注。

这工作正常,但问题是当我的位置在 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 {
...
}
}

最佳答案

禁用标注不会禁用 View 上的触摸(didSelectAnnotationView 仍会被调用)。

要在注释 View 上禁用用户交互,请将其 enabled 属性设置为 NO

但是,我建议不要在 viewForAnnotation 委托(delegate)方法中将 enabled 设置为 NO,我建议在 didAddAnnotationViews 委托(delegate)方法,而在 viewForAnnotation 中,只需为 MKUserLocation 返回 nil

例子:

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

关于ios - MKUserLocation 是可选择的,错误地拦截来自自定义 MKAnnotationViews 的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22037393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com