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的 MapCallouts例子

你可能感兴趣的:(MapView)