Tôi đang làm việc trên một dự án nhỏ hiển thị 7 loại chú thích khác nhau trên bản đồ. Chú thích của tôi được lấy từ một kết quả url trong mảng và tôi phân tích nó bằng cách sử dụng JSON. Tôi có rất nhiều chú thích và mọi thứ có vẻ tốt khi bản đồ tải. Sau khi phóng to và thu nhỏ, hình ảnh ghim thay đổi vì một lý do nào đó cho hình ảnh pin sai (một hình ảnh cụ thể, không rõ nguyên nhân).Chú thích MKMapview chú thích thay đổi hình ảnh pin động sau khi phóng to
Tôi chắc chắn rằng tôi đang thiếu thứ gì đó ở đây ... bạn có thể vui lòng trợ giúp :) không?
Dưới đây là một phần của mã của tôi, cho tôi biết nếu bạn cần nữa của nó:
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *identifier;
if(_mapView.tag==1){identifier = @"TurbulencePin";}
if(_mapView.tag==2){identifier = @"IcingPin";}
if(_mapView.tag==3){identifier = @"WindsPin";}
if(_mapView.tag==4){identifier = @"TemperaturePin";}
if(_mapView.tag==5){identifier = @"CloudsPin";}
if(_mapView.tag==6){identifier = @"VisibilityPin";}
if(_mapView.tag==7){identifier = @"MultiplePin";}
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
if ([annotation isKindOfClass:[Annotation class]]) {
CustomAnnotationView* annotationView = (CustomAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
annotationView = nil;
if (annotationView == nil) {
annotationView = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png",identifier]];
annotationView.image = img;
}
else
{
annotationView.annotation = annotation;
}
return annotationView;
}
return nil;
}
Cập nhật:
Dựa trên phản hồi của người khác, tôi đã sửa đổi mã cho cài đặt hình ảnh như sau:
Annotation *myCustomAnn = (Annotation *)annotation;
NSString *imgName = myCustomAnn.imageName;
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%@Pin.png",imgName]];
annotationView.image = img;
return annotationView;
Plus, tôi re đã di chuyển số annotationView = nil;
Tuy nhiên, tôi không thể đặt tên hình ảnh trong chú thích.m làm giá trị được mã hóa cứng vì tôi cần hiển thị hình ảnh pin khác cho mỗi chú thích. Tôi chắc chắn rằng có một lời giải thích nhưng giá trị duy nhất mà tôi có thể nhận được từ chú thích.m bên dưới mapView: viewForAnnotation: là tọa độ chú thích (myCustomAnn.coordinate.latitude
và myCustomAnn.coordinate.longitude)
, tôi không biết cách lấy các thuộc tính khác từ chú thích. m
các tính chất khác, chẳng hạn như tiêu đề, imgname vv trở lại như là null
Loại chú thích này phải là thuộc tính của chú thích, không sử dụng thuộc tính 'tag' của bản đồ cho mục này. (Ngoài ra, "số nhận dạng" của bạn không cần tĩnh nếu bạn đang thiết lập nó theo chương trình.) Nhưng điều duy nhất tôi có thể tưởng tượng sẽ làm cho hình ảnh của pin thay đổi là nếu 'thẻ' đang thay đổi bằng cách nào đó. Tôi muốn đề nghị đăng nhập và xem những gì đang xảy ra (nhưng, tốt hơn, từ bỏ 'tag' và sử dụng một thuộc tính tùy chỉnh cho chú thích của bạn). – Rob
Nhân tiện, tôi hy vọng bạn không có bảy bản đồ mở cùng một lúc. Và nếu bạn làm thế, không sử dụng '_mapView' (đó là một số ivar) nhưng thay vì sử dụng' mapView', tham số cho phương thức này. – Rob
Bạn đã nói "không thể đặt tên hình ảnh trong chú thích.m ...". Chính xác. Bạn không nên làm điều đó trong chú thích.m. Trong chú thích của bạn.h bạn chỉ cần định nghĩa một thuộc tính mới cho 'imageName'. Sau đó, trong mã của bạn để tạo chú thích (bộ điều khiển xem của bạn?) Sau khi tạo chú thích, đó là nơi bạn đặt thuộc tính 'imageName' cho chú thích của bạn. Về các thuộc tính khác của bạn là null, câu hỏi đặt ra là liệu bạn có đặt các thuộc tính đó trong VC của bạn, nơi bạn đã thực hiện 'alloc' /' init' của đối tượng chú thích, nhưng trước khi bạn thực hiện cuộc gọi 'addAnnotation'. – Rob