我有一个实现MKAnnotation协议的对象:
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface VoiceMemoryAnnotation : NSObject <MKAnnotation> {
NSString * blobkey;
}
@property (nonatomic, retain) NSString * blobkey;
-(id)initWithBlobkey:(NSString *) key andCoordinate:(CLLocationCoordinate2D) c;
@end
添加此对象时,地图可以正常工作,因为我可以看到红色引脚被丢弃。但是,当我想将此对象设置为显示标注时,就会出现问题。
我无法执行annotation.showCallOut = YES,因为“MkAnnotation”没有此属性,但是MkAnnotationView没有。我该如何解决这个问题?
我尝试实现地图回调“viewForAnnotation”以检查“VoiceMemoryAnnotation”,我尝试返回一个新的“MkAnnotationView”并设置它的callout = YES,但是当我这样做时,我开始出现分段错误。
任何想法我做错了什么?
答案 0 :(得分:2)
首先,您需要创建注释对象(实现MKAnnotation协议的对象)并使用类似
的内容将其添加到地图中VoiceMemoryAnnotation*VMA = [[VoiceMemoryAnnotation alloc] init];
VMA.title = @"Title String";
VMA.subtitle = @"Subtitle String";
[self.mapView addAnnotation:VMA];
这将自动调用您需要实现的以下方法:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView*singleAnnotationView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:nil];
singleAnnotationView.canShowCallout = YES;
return singleAnnotationView;
}
在这个实现中MKAnnotationView不起作用,它需要是MKPinAnnotationView。
答案 1 :(得分:0)
我不确定我是否完全理解你的问题,但我想知道,MKMapViews
- (void)selectAnnotation:(id <MKAnnotation>)annotation animated:(BOOL)animated
你在寻找什么?