gpt4 book ai didi

ios - 删除用户位置注释上的选择图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:23:34 25 4
gpt4 key购买 nike

我有以下代码:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotation{
annotation.image = [UIImage imageNamed:@"pinIconOn.png"];
}

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)annotation{
annotation.image = [UIImage imageNamed:@"pinIconOff.png"];
}

但是,当我选择用户位置时,会出现图钉图标。如何将用户位置的选择注释设置为无效,但对所有其他注释启用?

最佳答案

在委托(delegate)方法中,您可以检查所选注释的类型是否为 MKUserLocation,如果是,则不要更改图像。

MKUserLocation 是用户位置注释的记录类。

在这些委托(delegate)方法中,第二个参数是MKAnnotationView
该类具有属性 annotation,它指向 View 所针对的底层注释模型对象。检查 annotation 属性的类型。

例如:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotation{

if ([annotation.annotation isKindOfClass:[MKUserLocation class]])
{
//it's the user location, do nothing
return;
}

annotation.image = [UIImage imageNamed:@"pinIconOn.png"];
}

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)annotation{

if ([annotation.annotation isKindOfClass:[MKUserLocation class]])
{
//it's the user location, do nothing
return;
}

annotation.image = [UIImage imageNamed:@"pinIconOff.png"];
}

另外两个建议:

  1. 不要在这些委托(delegate)方法中将参数命名为annotation。使用与文档中建议的名称相同的名称 view 因为这才是参数的真正含义。它是注释的 View 对象——而不是注释模型 对象本身。这将使委托(delegate)方法中的代码不那么困惑。

    所以将 (MKAnnotationView *)annotation 更改为 (MKAnnotationView *)view 并且检查变为 if ([view.annotation isKindOfClass:[MKUserLocation class]] )

  2. 理想情况下,当调用这些委托(delegate)方法以及更改 View 中的图像时,您应该将“选定”状态存储在注释模型对象中。然后,在 viewForAnnotation 中,代码应该检查注释的状态并使用与委托(delegate)方法相同的逻辑设置图像(不同的图像取决于它是否被“选中”)否则,可能会发生什么是在选择注释后,如果用户缩放/平移 map ,图像可能会恢复为 viewForAnnotation 中指定的值。

关于ios - 删除用户位置注释上的选择图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400976/

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