我认为这将是一件愚蠢的事情,但我不知道如何解决它。
首先,我必须说我的麻烦是因为这项工作有时候。
我有一个主控制器,某些类别,然后触摸按钮,你可以打开其他视图控制器,在这个视图控制器中有一个自定义视图,其中包含带注释的mkmapview。
我的问题是,在某些类别中,它会部署注释,而在其他类别中则不会。
如果没有,你可以检查注释是否在MKMapView内部,但是在你再次与地图交互之前它没有调用mapView:ViewForAnnotation。
我将展示一些代码:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
CGRect mapFrame = CGRectMake(0, 0, frame.size.width, frame.size.height);
mapViewDefault = [[MKMapView alloc] initWithFrame:mapFrame];
mapViewDefault.delegate = self;
NSLog(@"Eres delegado!");
CLLocationCoordinate2D initialLocationCoordinate = [DataManager dataManager].centerCoordinate;
[mapViewDefault setCenterCoordinate:initialLocationCoordinate];
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(initialLocationCoordinate, 3000, 3000);
[mapViewDefault setRegion:viewRegion];
[mapViewDefault setUserInteractionEnabled:NO];
[mapViewDefault setScrollEnabled:NO];
[mapViewDefault setZoomEnabled:NO];
if(TAPIsiOS7()){
[mapViewDefault setRotateEnabled:NO];
}
[self addSubview:mapViewDefault];
}
return self;
}
- (void)addListOfPointsWithNumber:(NSArray*)arrayPoints {
NSLog(@"Añadimos anotación al array anotaciones");
[mapViewDefault removeAnnotations:mapViewDefault.annotations];
for (Place *place in arrayPoints) {
if(![place.coordinate isEqualToString:@"0 0"]){
Annotation *annotation = [[Annotation alloc] init];
annotation.coordinate = place.lCoordinate;
annotation.number = place.number;
annotation.place = place;
[mapViewDefault addAnnotation:annotation];
}
}
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if([annotation isKindOfClass:[Annotation class]]){
NSLog(@"Añadimos anotación al mapa");
Annotation *annotationMap = (Annotation *)annotation;
NSString *identifier = @"Pin";
UIImage *pinImage = [UIImage imageNamed:@"Pin.png"];
MKAnnotationView *pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
pinView.frame = CGRectMake(0, 0, pinImage.size.width, pinImage.size.height);
if (annotationMap.number>0) {
pinImage = [self imageWithView:pinImage andNumber:annotationMap.number];
}
pinView.image = pinImage;
pinView.annotation = annotationMap;
return pinView;
}
}
和3张图片:
我很确定这段代码效果很好(因为我可以在其他类别中看到它)并且它必须具有执行时间。
如果有人知道发生了什么,那应该很好。
谢谢大家!
答案 0 :(得分:0)
您应该在mapView:viewForAnnotation:
的所有情况下返回某些内容,而您目前只返回某些类型的注释。至少返回nil
并查看是否有帮助 - 可能对此方法的警告阻止某种运行时使用(尽管这有点拉伸)。