Cocoa touch MapKit更新注释图像
在异步请求完成并提供有关批注状态的信息后,我在查找更新自定义Cocoa touch MapKit更新注释图像,cocoa-touch,ios4,mapkit,mkannotation,mkannotationview,Cocoa Touch,Ios4,Mapkit,Mkannotation,Mkannotationview,在异步请求完成并提供有关批注状态的信息后,我在查找更新自定义MKAnnotationView图像的方法时遇到问题。到目前为止,我有: -(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{ 静态NSString*标识符=@“EstacionEB”; if([annotation IsKindof类:[EstacionEB类]]){ EstacionEB*位置=(EstacionEB*)注释; CustomPin*注释视图=(CustomPin*)[
MKAnnotationView
图像的方法时遇到问题。到目前为止,我有:
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{
静态NSString*标识符=@“EstacionEB”;
if([annotation IsKindof类:[EstacionEB类]]){
EstacionEB*位置=(EstacionEB*)注释;
CustomPin*注释视图=(CustomPin*)[\u mapita DequeueReusableAnnotationView with identifier:identifier];
如果(注释视图==nil){
annotationView=[[CustomPin alloc]initWithAnnotation:annotation重用标识符:标识符];
}否则{
annotationView.annotation=注释;
}
UIImage*image=[UIImage ImageName:[NSString stringWithFormat:@“%@.png”,[location elStatus]];
annotationView.enabled=是;
annotationView.canShowCallout=是;
annotationView.image=图像;
NSDictionary*temp=[[NSDictionary alloc]
initWithObjects:[NSArray arrayWithObjects:annotationView,位置,无]
forKeys:[NSArray arrayWithObjects:@“视图”,“注释”,无]
];
//该数组在控制器的viewDidLoad中合成和初始化
[self.markers setObject:temp forKey:location.eid];
返回注释视图;
}
返回零;
}
过了一会儿,我做了一个请求,结果是一个NSDictionary,我尝试执行以下操作,这两个元素都返回null:
-(void)updateStation:(NSString*)eid with details:(NSDictionary*)details
{
NSInteger free=[details objectForKey:@“free”];
NSInteger parkings=[details objectForKey:@“parkings”];
NSDictionary*storedStations=[self.markers objectForKey:eid];
CustomPin*pin=[storedStations objectForKey:@“视图”];//无
EstacionEB*station=[Referenceia objectForKey:@“annotation”];//也为零
[电台设置子标题:免费];
NSString*状态;
如果(自由==0){
状态=@“空”;
}else if((free.intValue>0)和&(parkings.intValue我不确定为什么从标记数组(尤其是注释)中获取零值。但是,我不建议像这样存储对注释视图的引用
viewForAnnotation
delegate方法可以在地图视图认为有必要的任何时候被调用,并且视图对象可以从一个调用更改为下一个调用。由于您也在使用注释视图,每个注释都使用相同的重用标识符,因此同样的视图对象也有可能被重用d用于以后的另一个注释
相反,在updateStation
中,我建议如下:
- 循环浏览地图视图的
注释数组
- 如果注释的类型为
EstacionEB
,则检查其eid
是否与正在更新的注释匹配
- 更新批注的
subTitle
和elStatus
属性(更新elStatus
很重要,因为viewForAnnotation
委托方法使用它来设置图像)
- 通过调用地图视图的
viewForAnnotation:
实例方法获取批注的当前视图(这与委托方法mapView:viewForAnnotation:
不同)
- 更新视图的
图像
属性
类似的例子见此。谢谢!我将按照您的建议进行操作,稍后再报告。