我目前有一个地图视图,其中填充了几个遵循 MKAnnotation 协议的对象。有两种不同类型的对象,商店和竞争对手。不同的对象附有不同类型的数据。
加载 mapView 后,程序会自动将我们商店和竞争对手的所有图钉放到地图上。每个图钉都使用一个自定义图像。当您缩小到更大的区域时,显然屏幕会变得非常混乱。我已经查看了基于此博客中描述的接近度过滤对象:http ://www.fiveminutes.eu/having-fun-with-ios-map-kit-grouping-annotations/
但在与一些同事讨论后,我们决定尝试在地图区域更改为纬度或经度增量大于 1.0
我已经创建了方法并实现了在用户放大和缩小时实现在较小和较大引脚之间切换的过程,但我似乎无法摆脱这个警告:
Sending "MKAnnotationView *" to parameter of incompatible type 'id<MKAnnotation>'
我知道这意味着我们可能做错了什么,将来可能会导致问题,所以我想在几天内发布 v1.1 之前修复它。
以下方法是我如何测试我的区域是否已超出我想要更改引脚的点。usingLargeIcons 是一个布尔值,它只是阻止我们在图标已经达到所需大小时调用 change 方法。
-(void)mapView:(MKMapView *)mapViewChanged regionDidChangeAnimated:(BOOL)animated
{
NSLog(@"latitudeDelta = %f",mapViewChanged.region.span.latitudeDelta);
NSLog(@"longitudeDelta = %f",mapViewChanged.region.span.longitudeDelta);
//Sanity check on region
if(mapView.region.span.latitudeDelta < 1.0){
if(!usingLargeIcons){
[self transformPinsLarge];
}
}else{
if(usingLargeIcons){
[self transformPinsSmall];
}
}
}
如您所见,此方法只是调用了两个转换方法。这些方法几乎相同,但有两个简单的单词变化 Small 和 Large。我的目标是获取地图上的所有引脚并将它们转储到一个阵列中,循环通过阵列并切换到较小的引脚。我不明白为什么我们会收到关于我们的对象不匹配的警告。如果我在 SO 的其他问题上错过了这一点,我深表歉意,请指出正确的方向,我将继续前进。我在 Google 上搜索了几个样式问题,但没有找到任何可以描述此对象警告的内容。
变换方法:
- (void)transformPinsSmall
{
usingLargeIcons = NO;
NSArray *allPins = [mapView annotations];
for (MKAnnotationView *a in allPins) {
//Gets small UIImage for brand, changes pin image
[[mapView viewForAnnotation:a] setImage:[self imageForSmallAnnotation:a]];
}
}
警告在 for 循环中的代码行上。“imageForSmallAnnotation”方法只是返回一个 UIImage 对象。有人可以向我解释如何输入这些图像或如何转换我的方法声明,以便我可以删除这些错误吗?
谢谢。