地图区域更改时地图标注显示不正确的图像
Map callouts showing incorrect images when map area changed
大家好,我是 mapkit 的新手,我创建了一个 mapView,我在其中显示了提供人员位置以及姓名和照片的注释。在每个注释上都有一个披露按钮,可以按下该按钮以转到该人的详细信息屏幕。当我从数组中加载人员时,我将 MKAnnotation 子类化并添加了一个标识符 属性 以便在按下注释时我可以识别原始数组元素并转到正确的人员屏幕。标注上有一个人的图像,它也通过标识符来自数组。这种 segueing 效果很好,但是我看到当我四处移动地图然后回到原来的位置时,人们的照片不再与人们的名字同步。
我在想我的 viewForAnnotation 方法可能有错误,如果有人能指出我在这里遗漏的内容,我将不胜感激。
这是方法代码:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// If it's the user location, just return nil.
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
// Handle any custom annotations.
if ([annotation isKindOfClass:[MyAnnotation class]])
{
// Try to dequeue an existing pin view first.
MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
if (!pinView)
{
// If an existing pin view was not available, create one.
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
pinView.canShowCallout = YES;
pinView.image = [UIImage imageNamed:@"Tch4"];
//pinView.calloutOffset = CGPointMake(0, 32);
pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
MyAnnotation *myAnn = (MyAnnotation *) annotation;
// GET ARRAY IDENTIFIER
identInt = [myAnn.identifier intValue];
NSLog(@" Tag = %i", identInt);
// Load and display photo using SDWEBImage
UIImageView *photoImageView = [[UIImageView alloc] init];
NSString *urlPhotoId = [jsonTeach [identInt]valueForKeyPath:@"picture.id"];
NSString *urlPhoto = [NSString stringWithFormat:@"http://soon.nextdoorteacher.com/img/profiles/%@.jpg", urlPhotoId];
[photoImageView sd_setImageWithURL:[NSURL URLWithString:urlPhoto] placeholderImage:[UIImage imageNamed:@"mortarboard2"]];
photoImageView.frame = CGRectMake(0,0,50,50);
pinView.leftCalloutAccessoryView = photoImageView;
} else {
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}
MyAnnotation 是包含标识符的子类 属性
谢谢
更改了方法,检查视图并同时将自定义图像和数据添加到引脚注释视图。
大家好,我是 mapkit 的新手,我创建了一个 mapView,我在其中显示了提供人员位置以及姓名和照片的注释。在每个注释上都有一个披露按钮,可以按下该按钮以转到该人的详细信息屏幕。当我从数组中加载人员时,我将 MKAnnotation 子类化并添加了一个标识符 属性 以便在按下注释时我可以识别原始数组元素并转到正确的人员屏幕。标注上有一个人的图像,它也通过标识符来自数组。这种 segueing 效果很好,但是我看到当我四处移动地图然后回到原来的位置时,人们的照片不再与人们的名字同步。 我在想我的 viewForAnnotation 方法可能有错误,如果有人能指出我在这里遗漏的内容,我将不胜感激。 这是方法代码:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// If it's the user location, just return nil.
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
// Handle any custom annotations.
if ([annotation isKindOfClass:[MyAnnotation class]])
{
// Try to dequeue an existing pin view first.
MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
if (!pinView)
{
// If an existing pin view was not available, create one.
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
pinView.canShowCallout = YES;
pinView.image = [UIImage imageNamed:@"Tch4"];
//pinView.calloutOffset = CGPointMake(0, 32);
pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
MyAnnotation *myAnn = (MyAnnotation *) annotation;
// GET ARRAY IDENTIFIER
identInt = [myAnn.identifier intValue];
NSLog(@" Tag = %i", identInt);
// Load and display photo using SDWEBImage
UIImageView *photoImageView = [[UIImageView alloc] init];
NSString *urlPhotoId = [jsonTeach [identInt]valueForKeyPath:@"picture.id"];
NSString *urlPhoto = [NSString stringWithFormat:@"http://soon.nextdoorteacher.com/img/profiles/%@.jpg", urlPhotoId];
[photoImageView sd_setImageWithURL:[NSURL URLWithString:urlPhoto] placeholderImage:[UIImage imageNamed:@"mortarboard2"]];
photoImageView.frame = CGRectMake(0,0,50,50);
pinView.leftCalloutAccessoryView = photoImageView;
} else {
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}
MyAnnotation 是包含标识符的子类 属性 谢谢
更改了方法,检查视图并同时将自定义图像和数据添加到引脚注释视图。