zoukankan      html  css  js  c++  java
  • 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例子
  • 相关阅读:
    关于eclipse 的 web.xml文件 There is '1' error in 'j2ee_1_4.xsd'. 错误
    C#实现Java的AES加密解密算法
    jsp页面报错javax.servlet.jsp.jspException cannot be resolved to a type
    Ubuntu下查看jdk安装路径
    【Mysql】启动mysql报错mysqld_safe error: log-error set to /var/log/mariadb/mariadb.log
    spring mvc导出csv案例
    MyBatis 调用存储过程(详解)
    mysql 无限递归出现 data too long for column 'xxx' 错误
    java的maven项目头上有红叉解决方法
    Nexus3搭建Docker等私服
  • 原文地址:https://www.cnblogs.com/peer/p/2044591.html
Copyright © 2011-2022 走看看