在做地图有关的程序时,我们经常需要用户在地图上指定位置我们再用大头针标记。
1、在viewDidLoad中添加我们要捕获的手势:
UILongPressGestureRecognizer *lpress = [[UILongPressGestureRecognizer alloc] initWithTarget: self action: @selector (longPress:)];
|
lpress.minimumPressDuration = 0.5;
|
lpress.allowableMovement = 10.0; |
[m_mapView addGestureRecognizer:lpress];
|
2、实现要响应的longPress方法:
- ( void )longPress:(UIGestureRecognizer*)gestureRecognizer{
|
if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
|
CGPoint touchPoint = [gestureRecognizer locationInView:m_mapView];
|
CLLocationCoordinate2D touchMapCoordinate =
|
[m_mapView convertPoint:touchPoint toCoordinateFromView:m_mapView];
|
MKPointAnnotation* pointAnnotation = nil ;
|
pointAnnotation = [[MKPointAnnotation alloc] init];
|
pointAnnotation.coordinate = touchMapCoordinate;
|
pointAnnotation.title = @ "名字" ;
|
[m_mapView addAnnotation:m_pointAnnotation];
|
[pointAnnotation release];
|
3,响应MKMapView的代理方法:
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:( id <MKAnnotation>)annotation{
|
if ([annotation isKindOfClass:[MKUserLocation class ]])
|
[ self .navigationItem.rightBarButtonItem setEnabled: YES ];
|
static NSString * AnnotationIdentifier = @ "AnnotationIdentifier" ;
|
MKPinAnnotationView*
customPinView = (MKPinAnnotationView *)[mapView
dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
|
customPinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
|
customPinView.pinColor = MKPinAnnotationColorRe;
|
customPinView.animatesDrop = YES ;
|
customPinView.canShowCallout = YES ;
|
customPinView.draggable = YES ;
|
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
|
[rightButton addTarget: self action: @selector (showDetails:) forControlEvents:UIControlEventTouchUpInside];
|
customPinView.rightCalloutAccessoryView = rightButton;
|
customPinView.annotation = annotation;
|
4、实现showDetails方法:
- (void)showDetails:(UIButton*)sender
{
}
关于MKMapView的更多请参加apple的