Có cách nào đơn giản để xóa tất cả các chú thích trên bản đồ mà không cần lặp lại tất cả các chú thích được hiển thị trong Objective-c không?
Có cách nào đơn giản để xóa tất cả các chú thích trên bản đồ mà không cần lặp lại tất cả các chú thích được hiển thị trong Objective-c không?
Câu trả lời:
Vâng, đây là cách
[mapView removeAnnotations:mapView.annotations]
Tuy nhiên, dòng mã trước đó sẽ xóa tất cả các chú thích bản đồ "PINS" khỏi bản đồ, bao gồm cả ghim vị trí của người dùng "Blue Pin". Để xóa tất cả các chú thích trên bản đồ và giữ ghim vị trí của người dùng trên bản đồ, có hai cách khả thi để làm điều đó
Ví dụ 1, giữ lại chú thích vị trí của người dùng, xóa tất cả các ghim, thêm lại ghim vị trí của người dùng, nhưng có một sai sót với cách làm này, nó sẽ làm cho ghim vị trí của người dùng nhấp nháy trên bản đồ, do xóa ghim rồi mới thêm vào trở lại
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
Ví dụ 2, cá nhân tôi muốn tránh xóa mã pin của người dùng vị trí ngay từ đầu,
- (void)removeAllPinsButUserLocation2
{
id userLocation = [mapView userLocation];
NSMutableArray *pins = [[NSMutableArray alloc] initWithArray:[mapView annotations]];
if ( userLocation != nil ) {
[pins removeObject:userLocation]; // avoid removing user location off the map
}
[mapView removeAnnotations:pins];
[pins release];
pins = nil;
}
Đây là cách đơn giản nhất để làm điều đó:
-(void)removeAllAnnotations
{
//Get the current user location annotation.
id userAnnotation=mapView.userLocation;
//Remove all added annotations
[mapView removeAnnotations:mapView.annotations];
// Add the current user location annotation again.
if(userAnnotation!=nil)
[mapView addAnnotation:userAnnotation];
}
Dưới đây là cách xóa tất cả các chú thích ngoại trừ vị trí của người dùng, được viết rõ ràng vì tôi tưởng tượng rằng tôi sẽ tìm kiếm câu trả lời này một lần nữa:
NSMutableArray *locs = [[NSMutableArray alloc] init];
for (id <MKAnnotation> annot in [mapView annotations])
{
if ( [annot isKindOfClass:[ MKUserLocation class]] ) {
}
else {
[locs addObject:annot];
}
}
[mapView removeAnnotations:locs];
[locs release];
locs = nil;
Điều này rất giống với câu trả lời của Sandip, ngoại trừ việc nó không thêm lại vị trí của người dùng để chấm màu xanh lam không nhấp nháy và tắt lại.
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
Bạn không cần lưu bất kỳ tham chiếu nào đến vị trí người dùng. Tất cả những gì cần thiết là:
[mapView removeAnnotations:mapView.annotations];
Và miễn là bạn đã mapView.showsUserLocation
đặt thành YES
, bạn sẽ vẫn có vị trí của người dùng trên bản đồ. Cài đặt thuộc tính này YES
về cơ bản yêu cầu chế độ xem bản đồ bắt đầu cập nhật và tìm nạp vị trí của người dùng để hiển thị vị trí đó trên bản đồ. Từ các MKMapView.h
ý kiến:
// Set to YES to add the user location annotation to the map and start updating its location
Phiên bản Swift:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}