มีวิธีง่ายๆในการลบคำอธิบายประกอบทั้งหมดบนแผนที่โดยไม่ต้องทำซ้ำผ่านคำอธิบายประกอบที่แสดงทั้งหมดใน Objective-c หรือไม่?
มีวิธีง่ายๆในการลบคำอธิบายประกอบทั้งหมดบนแผนที่โดยไม่ต้องทำซ้ำผ่านคำอธิบายประกอบที่แสดงทั้งหมดใน Objective-c หรือไม่?
คำตอบ:
ใช่นี่คือวิธีการ
[mapView removeAnnotations:mapView.annotations]
อย่างไรก็ตามบรรทัดรหัสก่อนหน้านี้จะลบคำอธิบายประกอบแผนที่ "PINS" ทั้งหมดออกจากแผนที่รวมถึงหมุดตำแหน่งของผู้ใช้ "Blue Pin" หากต้องการลบคำอธิบายประกอบแผนที่ทั้งหมดและคงหมุดตำแหน่งของผู้ใช้ไว้บนแผนที่มีสองวิธีที่ทำได้
ตัวอย่างที่ 1 เก็บคำอธิบายประกอบตำแหน่งของผู้ใช้ลบพินทั้งหมดเพิ่มพินตำแหน่งของผู้ใช้กลับ แต่มีข้อบกพร่องกับวิธีนี้จะทำให้พินตำแหน่งของผู้ใช้กะพริบบนแผนที่เนื่องจากการลบพินแล้วเพิ่ม กลับ
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
ตัวอย่างที่ 2 โดยส่วนตัวแล้วฉันชอบที่จะหลีกเลี่ยงการลบพินผู้ใช้ตำแหน่ง
- (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;
}
นี่คือวิธีที่ง่ายที่สุดในการดำเนินการ:
-(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];
}
นี่คือวิธีลบคำอธิบายประกอบทั้งหมดยกเว้นตำแหน่งของผู้ใช้โดยเขียนไว้อย่างชัดเจนเพราะฉันคิดว่าฉันจะมาหาคำตอบนี้อีกครั้ง:
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;
สิ่งนี้คล้ายกับคำตอบของ Sandip มากยกเว้นว่าจะไม่เพิ่มตำแหน่งของผู้ใช้อีกครั้งเพื่อให้จุดสีน้ำเงินไม่กระพริบและปิดอีกครั้ง
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
คุณไม่จำเป็นต้องบันทึกการอ้างอิงใด ๆ ไปยังตำแหน่งของผู้ใช้ สิ่งที่จำเป็นคือ:
[mapView removeAnnotations:mapView.annotations];
และตราบเท่าที่คุณmapView.showsUserLocation
ตั้งค่าเป็นYES
คุณจะยังคงมีตำแหน่งของผู้ใช้บนแผนที่ การตั้งค่าคุณสมบัตินี้เพื่อYES
ขอให้มุมมองแผนที่เริ่มอัปเดตและดึงข้อมูลตำแหน่งของผู้ใช้โดยทั่วไปเพื่อแสดงบนแผนที่ จากMKMapView.h
ความคิดเห็น:
// Set to YES to add the user location annotation to the map and start updating its location
เวอร์ชัน Swift:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}
สวิฟต์ 3
if let annotations = self.mapView.annotations {
self.mapView.removeAnnotations(annotations)
}
Swift 2.0 ง่ายและดีที่สุด:
mapView.removeAnnotations(mapView.annotations)
หากต้องการลบคลาสย่อยประเภทหนึ่งคุณสามารถทำได้
mapView.removeAnnotations(mapView.annotations.filter({$0 is PlacesAnnotation}))
ที่PlacesAnnotation
เป็น subclass ของMKAnnotation