在设置我的自定义图片图片时,我无法理解我做错了什么。
这是我的mapView:viewForAnnotation方法。如您所见,我希望根据Location对象中的值显示不同的图像。对于大多数人来说这是有效的,并且正确的图像与正确的引脚相关联。然而,有时他们只是完全错误,似乎是随机分配的。
任何指导都将不胜感激!
编辑:我已根据最新评论更新了我的代码。它仍然会导致相同的行为......
- (MKAnnotationView *)mapView:(MKMapView *)MapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
return nil;
}
if([annotation isKindOfClass:[ADClusterAnnotation class]])
{
MKAnnotationView * pinView = (MKAnnotationView *)[MapView dequeueReusableAnnotationViewWithIdentifier:@"ADClusterableAnnotation"];
if (pinView == nil)
{
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"ADClusterableAnnotation"];
} else
{
pinView.annotation = annotation;
}
Location *selectedLocation = [[[(ADClusterAnnotation *) annotation cluster] annotation] annotation];
UIButton *rightCallout = [UIButton buttonWithType:UIButtonTypeCustom];
rightCallout.frame = CGRectMake(0, 0, 23, 23);
rightCallout.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
rightCallout.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
pinView.image = nil;
pinView.canShowCallout = YES;
[rightCallout setImage:[UIImage imageNamed:@"star.png"] forState:UIControlStateNormal];
pinView.rightCalloutAccessoryView = rightCallout;
if (selectedLocation.number.intValue > 4)
{
pinView.image = [UIImage imageNamed:@"image3.png"];
}
else if (selectedLocation.number.intValue >= 1)
{
pinView.image = [UIImage imageNamed:@"image2.png"];
}
else if (selectedLocation.number.intValue < 1)
{
pinView.image = [UIImage imageNamed:@"image3.png"];
}
return pinView;
}
return nil;
}
行。我比起点更简单,但我仍然遇到了同样的问题!这真的让我发疯,我不知道我做错了什么。请有人帮忙。
顺便说一下,我正在使用以下内容来聚集我的注释(我不知道这是否会导致问题!):https://github.com/applidium/ADClusterMapView
答案 0 :(得分:1)
如果pinView在尝试出列后是山峰,则只设置pinView.image。哪个适用于前几页,直到页面已满。如果然后向下滚动屏幕上的那些,则退出视图并重新用于显示的新行。因为它们是从队列中拉出来的,所以你不会改变它们的图像,而是从已经消失的行中看到图像。
基本上你应该建立一个新的pinView,如果你不能出列一个,但你仍然需要设置pinView.image,所以关闭这样的if
语句。
if (!pinView) {
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation
} reuseIdentifier:@"ADClusterableAnnotation"];