iphone - MKPinAnnotationView 与 MKAnnotationView

标签 iphone mkmapview mkannotationview mkpinannotationview

我继承了一个引发此警告的项目

Incompatible pointer types assigning to 'MKPinAnnotationView *' from 'MKAnnotationView *'

在这一行

pinView=[[[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID]autorelease];
    }

我想在没有警告的情况下退回项目,所以我希望这里有人能快速给出答案

完整代码:

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation: (id  <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil; 

    NSUserDefaults *prefs=[NSUserDefaults standardUserDefaults];

    if(annotation != mapView.userLocation) 

    {

        static NSString *defaultPinID = @"com.invasivecode.pin";

        pinView = (MKPinAnnotationView *)[mapView  dequeueReusableAnnotationViewWithIdentifier:defaultPinID];


        if (!pinView) {
            pinView=[[[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID]autorelease];
        }

    }   
    pinView.animatesDrop=YES;
    [mapView.userLocation setTitle:@"I am here"];
    [mapView.userLocation setSubtitle:[prefs objectForKey:@"CurrentLocationName"]];
    return pinView;        
}

谢谢!

最佳答案

pinView 变量被声明为 MKPinAnnotationView,但该行创建了一个 MKAnnotationView

更改此行:

pinView=[[[MKAnnotationView alloc]initWithAnnotation...

至:

pinView=[[[MKPinAnnotationView alloc]initWithAnnotation...


您还应该有一个 else 部分到 if 来处理注释 View 的重用:

else
    pinView.annotation = annotation;

关于iphone - MKPinAnnotationView 与 MKAnnotationView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499226/

相关文章:

iOS:获取位置之间的距离

objective-c - 检查 mapView 是否已经包含注释

iphone - 如何显示来自 MKAnnotationView 的多个标注?

ios - FetchRequest - NSArray 元素无法匹配 Swift 数组元素类型 - Swift 2.0

iPhone 5 [[UIScreen mainScreen] bounds].size.height

ios - 如何在 objective-c 中使用 for 循环显示存储在数组中的值

ios - 当部分 map 被覆盖时居中 MKMapView

iOS - 创建自定义 MKAnnotation 标注时出现问题

ios - UIButtonTypeDetailDisclosure 颜色变化

iOS - 在 View Controller 中绘制一个 donut