在做地图有关的程序时,我们经常需要用户在地图上指定位置我们再用大头针标记。
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的