在做地图有关的程序时,我们经常需要用户在地图上指定位置我们再用大头针标记。

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

相关文章:

  • 2022-12-23
  • 2021-06-16
  • 2022-12-23
  • 2021-04-09
  • 2021-12-21
  • 2022-12-23
  • 2022-01-16
  • 2021-06-17
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-13
  • 2021-07-17
  • 2022-02-20
相关资源
相似解决方案