0
我試圖根據對象值替換MKAnnotationView圖像,代碼被執行但圖像被隨機分配,因此它們與正確的值不匹配。MKAnnotationView無法正常工作
- (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(EventAnnotation *)annotation{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
MKAnnotationView *annotationView = [mapview dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
if(annotationView)
return annotationView;
else
{
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:AnnotationIdentifier];
annotationView.canShowCallout = YES;
annotationView.image = [self setImageByType:annotation];
annotationView.draggable = NO;
return annotationView;
}
return nil;
}
setImageByType方法:
- (UIImage*)setImageByType:(EventAnnotation *)annotation{
//Set annotation image depending on its type
UIImage *image = [[UIImage alloc]init];
NSString *type = annotation.type;
if ([type isEqualToString:@"event"]) {
image = [UIImage imageNamed:@"geolocalization_events"];
}else if ([type isEqualToString:@"show"]){
image = [UIImage imageNamed:@"geolocalization_shows"];
}else if ([type isEqualToString:@"culture"]){
image = [UIImage imageNamed:@"geolocalization_culture"];
}else if ([type isEqualToString:@"eat"]){
image = [UIImage imageNamed:@"geolocalization_eat"];
}else if ([type isEqualToString:@"drink"]){
image = [UIImage imageNamed:@"geolocalization_drink"];
}else if ([type isEqualToString:@"cybercafe"]){
image = [UIImage imageNamed:@"geolocalization_cybercafe"];
}
UIImage *finalImage = [self imageWithImage:image scaledToSize:CGSizeMake(50, 50)];
return finalImage;
}
調整圖像的大小:
- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//Resize annotation image
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
我會說比圖像被分配給該視圖的代碼被執行得更快。有任何想法嗎?
這似乎是現在的工作很好!你能簡單地解釋一下爲什麼會出現這種問題? (使用選項1) – iDeC
當我回想起使用'UITableView'的「出列」方法時,您返回的對象不是新對象。我還沒有完全調查,但基本上它看起來像對象可以具有與該resuse標識符使用任何其他對象相同的屬性值。實質上,我必須每次完全重新配置對象,將所有屬性設置爲它們應該是的。如果你只需要改變一些東西,那麼我相信這樣的表現會更快。在你的情況下,這是真的,因爲'canShowCallout'和'draggable'不需要設置。 –
您的案例中的性能提升可能無限大,但在其他情況下,出列可能會有用。我認爲使用它的好策略。 –