MKMAPVIEW上长按屏幕,添加大头针
在做地图有关的程序时,我们经常需要用户在地图上指定位置我们再用大头针标记。
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{}关于MKMapView的更多请参加apple的