我想讓我的應用程序的用戶在地圖中選擇一個位置。本地地圖具有「放置引腳」功能,您可以通過放置引腳來定位某些內容。我該如何在MapKit中做到這一點?如何使用MapKit放置一個別針?
回答
你需要創建一個實現MKAnnotation協議的對象,然後將該對象添加到的MKMapView:
@interface AnnotationDelegate : NSObject <MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString * title;
NSString * subtitle;
}
實例化的委託對象,並將其添加到地圖:
AnnotationDelegate * annotationDelegate = [[[AnnotationDelegate alloc] initWithCoordinate:coordinate andTitle:title andSubtitle:subt] autorelease];
[self._mapView addAnnotation:annotationDelegate];
地圖將訪問AnnotationDelegate上的座標屬性以找出在地圖上放置圖釘的位置。
如果您想自定義您的註解視圖,你將需要實現MKMapViewDelegateviewForAnnotation方法對您的地圖視圖控制器:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
如果你想實現的銷拖動功能,你可以請閱讀Apple OS Reference Library中有關處理註釋觸摸事件的內容。
您也可以使用mapkit拖拽this article,mapkit指GitHub上的工作示例庫。您可以通過檢查DDAnnotation對象上的_coordinates成員來獲取拖動註釋的座標。
有一個很好的博客文章和示例代碼註釋拖放在這裏:http://hollowout.blogspot.com/2009/07/mapkit-annotation-drag-and-drop-with.html – RedBlueThing 2009-12-16 23:28:50
事情是,即使你能夠拖動,拖動完成後,你能夠獲得該引腳的位置嗎? – erotsppa 2009-12-17 15:22:09
我已經更新了我的答案,並詳細介紹了拖放操作。 – RedBlueThing 2009-12-20 13:11:53
有多種方法可以放置一個別針,而且您不會指定在問題中採用哪種方式。第一種方法是以編程方式進行,因爲您可以使用RedBlueThing編寫的內容,不過您並不需要自定義類(具體取決於您要定位的iOS版本)。對於iOS 4.0及更高版本,你可以使用這個片段以編程方式放置圖釘:
// Create your coordinate
CLLocationCoordinate2D myCoordinate = {2, 2};
//Create your annotation
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
// Set your annotation to point at your coordinate
point.coordinate = myCoordinate;
//If you want to clear other pins/annotations this is how to do it
for (id annotation in self.mapView.annotations) {
[self.mapView removeAnnotation:annotation];
}
//Drop pin on map
[self.mapView addAnnotation:point];
如果你希望能夠放棄例如通過實際MapView的長按腳,可以這樣做:
// Create a gesture recognizer for long presses (for example in viewDidLoad)
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 0.5; //user needs to press for half a second.
[self.mapView addGestureRecognizer:lpgr]
- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state != UIGestureRecognizerStateBegan) {
return;
}
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = touchMapCoordinate;
for (id annotation in self.mapView.annotations) {
[self.mapView removeAnnotation:annotation];
}
[self.mapView addAnnotation:point];
}
如果要枚舉所有註釋,只需在兩個代碼段中使用代碼即可。這是您如何記錄所有註釋的位置:
for (id annotation in self.mapView.annotations) {
NSLog(@"lon: %f, lat %f", ((MKPointAnnotation*)annotation).coordinate.longitude,((MKPointAnnotation*)annotation).coordinate.latitude);
}
這個問題回答了@erotsppa問的問題 – JProgrammer 2015-06-18 20:35:11
您可能還需要設置MapView委託。
[mkMapView setDelegate:self];
然後調用其委託,viewForAnnotation
:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
MKPinAnnotationView *pinAnnotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"current"];
pinAnnotationView.animatesDrop = YES;
pinAnnotationView.pinColor = MKPinAnnotationColorRed;
return pinAnnotationView;
}
你可以得到觸摸的位置,jcesarmobile答案上得到挖掘coordinates with iphone mapkit,你可以刪除引腳的任何地方爲波紋管
// Define pin location
CLLocationCoordinate2D pinlocation;
pinlocation.latitude = 51.3883454 ;//set latitude of selected coordinate ;
pinlocation.longitude = 1.4368011 ;//set longitude of selected coordinate;
// Create Annotation point
MKPointAnnotation *Pin = [[MKPointAnnotation alloc]init];
Pin.coordinate = pinlocation;
Pin.title = @"Annotation Title";
Pin.subtitle = @"Annotation Subtitle";
// add annotation to mapview
[mapView addAnnotation:Pin];
- 1. 如何使地圖放置一個別針 - iOS 5
- 2. MapKit,使用按鈕在一個位置放置圖釘
- 3. 在MapKit中設置縮放級別Xcode
- 4. 如何在Android的MapView上放置一個別針?
- 5. 如何在React Native MapView新聞的位置放置一個別針?
- 6. 如何在多個位置放置引腳mapkit swift
- 7. 在MKMapView上放一個別針
- 8. 如何使我的應用程序使用MapKit縮放到我的位置
- 9. 如何設置地圖視圖的縮放級別,使三個針腳可見?
- 10. MapKit放大到用戶當前位置
- 11. Mapkit - 縮放級別不斷復位
- 12. 如何將Mapkit限制到某些縮放級別?
- 13. 如何在iOS mapKit中實現最大縮放級別?
- 14. MapKit-如何添加位置約束來放置引腳?
- 15. 使用MapKit選擇位置
- 16. 我將如何使用MapKit來與商店落針郵編/ Postode
- 17. 在地圖上放棄多個針腳給定座標Mapkit iPhone
- 18. iphone mapkit:有針腳一個接一個地掉落
- 19. 如何在地圖視圖中放置別針?
- 20. 使用Mapkit縮放到註釋而不是用戶位置
- 21. iOS - 使用MapKit和plist註釋 - 如何在一個位置搜索半徑
- 22. 只能在一個城市使用MapKit
- 23. 使用滑塊縮小和放大mapKit
- 24. 如何使用Google Maps API V3「放大」一個級別?
- 25. Xcode Mapkit放大到當前位置
- 26. 如何使用swift在mapKit中的兩個不同標記上放置兩個圖像
- 27. 使用谷歌地圖v3在特定地址放下一個別針
- 28. 如何使用Mapkit訪問用戶位置(Swift)
- 29. 如何使用MapKit關注用戶位置
- 30. MapKit縮放按鈕
如果有一些我可以用我的答案來澄清。請告訴我。 – RedBlueThing 2010-08-16 13:05:23
當寫這篇文章時,至少有兩個很好的答案可供選擇。拿你的選擇。 – JugsteR 2013-08-20 20:03:59