在做地图有关的程序时,我们经常需要用户在地图上指定位置我们再用大头针标记。
1、在viewDidLoad中添加我们要捕获的手势:
UILongPressGestureRecognizer *lpress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; lpress.minimumPressDuration = 0.5;//按0.5秒响应longPress方法 lpress.allowableMovement = 10.0; [m_mapView addGestureRecognizer:lpress];//m_mapView是MKMapView的实例 [lpress release];
2、实现要响应的longPress方法:
- (void)longPress:(UIGestureRecognizer*)gestureRecognizer{ if (gestureRecognizer.state == UIGestureRecognizerStateEnded){ return; } //坐标转换 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];//导航栏右边回到当前位置的按钮可用 return nil; } static NSString* AnnotationIdentifier = @"AnnotationIdentifier"; MKPinAnnotationView* customPinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier]; if (!customPinView) { customPinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease]; customPinView.pinColor = MKPinAnnotationColorRe;//设置大头针的颜色 customPinView.animatesDrop = YES; customPinView.canShowCallout = YES; customPinView.draggable = YES;//可以拖动 //添加tips上的按钮 UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside]; customPinView.rightCalloutAccessoryView = rightButton; }else{ customPinView.annotation = annotation; } return customPinView; }
4、实现showDetails方法:
- (void)showDetails:(UIButton*)sender
{
}