我想在地图中显示我的自定义注释,并将当前位置显示为地图视图中的标准图钉,并带有蓝色。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *identifier = @"MapPin";
if ([annotation isKindOfClass:[MyAnnotations class]]) {
MyAnnotations *ann= annotation;
MKAnnotationView *annotationView = (MKAnnotationView *) [self.map dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
if (ann.custom){
annotationView.image = [UIImage imageNamed:@"custom.png"];
}else{
//?? annotationView.image = [UIImage imageNamed:@"bluePin.png?"];
}
} else {
annotationView.annotation = annotation;
}
if(ann.custom){
UIButton *nextButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[nextButton addTarget:self action:@selector(annotationPicked) forControlEvents:UIControlEventTouchUpInside];
annotationView.rightCalloutAccessoryView=nextButton;
}
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.multipleTouchEnabled = NO;
return annotationView;
}
return nil;
}
答案 0 :(得分:0)
如果custom
属性要区分您的注释和地图视图的用户位置,那么该案例已由第一个if
处理,该custom
检查注释的类和MKUserLocation
属性没必要。
地图视图的用户位置注释类型为nil
,因此在这种情况下代码将返回showsUserLocation
,地图视图将显示标准蓝点(假设YES
为{{ 1}})。
但是,如果custom
属性要区分两种类型的自己的注释,那么一个问题是它不能正确处理重复使用的注释视图({{1}时})。
重复使用注释视图时,其annotationView != nil
和image
可能不适合当前的rightCalloutAccessoryView
,因此无论是视图还是需要设置(或清除)这些属性是否正在重复使用。例如:
annotation
虽然if ([annotation isKindOfClass:[MyAnnotations class]]) {
MyAnnotations *ann= annotation;
MKAnnotationView *annotationView = (MKAnnotationView *) [self.map dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.multipleTouchEnabled = NO;
} else {
annotationView.annotation = annotation;
}
//set view properties that depend on annotation-specific properties
//regardless of whether view is new or re-used...
if (ann.custom)
{
annotationView.image = [UIImage imageNamed:@"custom.png"];
UIButton *nextButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[nextButton addTarget:self action:@selector(annotationPicked) forControlEvents:UIControlEventTouchUpInside];
annotationView.rightCalloutAccessoryView=nextButton;
}
else
{
annotationView.image = [UIImage imageNamed:@"bluePin.png"];
annotationView.rightCalloutAccessoryView = nil;
}
return annotationView;
}
属性只是将所有您的注释与地图视图的用户位置分开,但首先不需要它(只要您检查注释的{{1}将custom
设置为class
)。
答案 1 :(得分:0)
可能是您在此事件中放入自定义代码。因为当您单击此方法调用的当前位置注释时,可能会因为该代码应用程序崩溃而导致崩溃。
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
}
感谢。