zoukankan      html  css  js  c++  java
  • MapsDemo

      1 #import "ViewController.h"
      2 //位置
      3 #import <CoreLocation/CoreLocation.h>
      4 //地图
      5 #import <MapKit/MapKit.h>
      6 //标注视图
      7 #import "HLAnnotation.h"
      8 @interface ViewController ()<MKMapViewDelegate>
      9 //位置的管理者
     10 @property (nonatomic,strong) CLLocationManager *manager ;
     11 //地图的对象
     12 @property (nonatomic,strong) MKMapView *mapView;
     13 
     14 @end
     15 
     16 @implementation ViewController
     17 
     18 - (void)viewDidLoad {
     19     [super viewDidLoad];
     20     
     21     //创建位置管理者
     22     self.manager = [[CLLocationManager alloc] init];
     23     if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
     24         
     25         [self.manager requestAlwaysAuthorization];
     26         [self.manager requestWhenInUseAuthorization];
     27     }
     28     //创建地图的对象
     29     self.mapView = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];
     30     [self.view addSubview:self.mapView];
     31     //地图的类型
     32     self.mapView.mapType = MKMapTypeStandard ;
     33     //显示用户的信息
     34     self.mapView.showsUserLocation = YES ;
     35     //设置地图的代理
     36     self.mapView.delegate = self ;
     37     
     38     //添加一个手势
     39     [self.mapView addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGerture:)]];
     40    
     41 }
     42 
     43 #pragma maek --长按手势的关联方法
     44 -(void)longPressGerture:(UILongPressGestureRecognizer *)longPress
     45 {
     46     //获取点击点
     47     CGPoint point = [longPress locationInView:longPress.view];
     48     
     49     //将触摸得到的点,转化为2D坐标的点
     50     CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
     51     
     52     //创建一个标注视图对象
     53     HLAnnotation *annotation = [[HLAnnotation alloc] init];
     54     
     55     //给标注视图设置一个地图上的位置
     56     annotation.coordinate = coordinate ;
     57     
     58     //设置标题
     59     annotation.title = @"china";
     60     
     61     //设置子标题
     62     annotation.subtitle = @"广州";
     63     
     64     static NSInteger a = 1 ;
     65     
     66     //设置tag值
     67     annotation.tag = a ;
     68     a ++ ;
     69     
     70     //将标注视图添加到地图上
     71     [self.mapView addAnnotation:annotation];
     72     
     73 }
     74 #pragma mark --自定义标注视图样式的方法
     75 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
     76 {
     77     //如果系统的用户位置的大头针
     78     if ([annotation isKindOfClass:[MKUserLocation class]]) {
     79         
     80         return nil;
     81     }
     82     
     83     //创建一个重用标示符
     84     static NSString *identifier = @"annotation";
     85     
     86     //创建一个重用队列
     87     MKPinAnnotationView *pin = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
     88     if (pin == nil) {
     89        
     90         pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation     reuseIdentifier:identifier];
     91     }
     92     //设置大头针的往下坠落的效果
     93     pin.animatesDrop = YES ;
     94     //允许打开气泡的属性
     95     pin.canShowCallout = YES ;
     96     
     97     //创建气泡的左右按钮
     98     UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom];
     99     leftButton.frame = CGRectMake(0, 0, 30, 30);
    100     [leftButton setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
    101     pin.leftCalloutAccessoryView = leftButton ;
    102     leftButton.tag = 10086 ;
    103     
    104     UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
    105     rightButton.frame = CGRectMake(0, 0, 30, 30);
    106     [rightButton setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateNormal];
    107     pin.rightCalloutAccessoryView = rightButton ;
    108     rightButton.tag = 10010 ;
    109 
    110     
    111     return pin ;
    112 }
    113 
    114 #pragma mark --点击大头针附件按钮时执行的方法
    115 -(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
    116 {
    117     if (control ==[self.view viewWithTag:10086]) {
    118         
    119         NSLog(@"左边");
    120     }
    121     else
    122     {
    123         NSLog(@"右边");
    124     }
    125 }
    126 #pragma mark --点击标注视图执行的方法
    127 -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
    128 {
    129     NSLog(@"view = %@",view);
    130 }
    131 
    132 #pragma mark --地图区域发生改变时执行的方法
    133 -(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
    134 {
    135     NSLog(@"地图区域发生改变时执行的方法");
    136 }
    137 
    138 #pragma mark --更新用户位置的方法
    139 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
    140 {
    141     NSLog(@"%@",userLocation.location);
    142     
    143     //设置标题
    144     userLocation.title = @"广州市";
    145     userLocation.subtitle = @"天河区";
    146     //设置地图的比例尺
    147     MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
    148     //设置范围
    149     MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.location.coordinate, span);
    150     self.mapView.region = region ;
    151 }

    自定义标注视图:继承NSObject

     1 #import <Foundation/Foundation.h>
     2 #import <MapKit/MapKit.h>
     3 @interface HLAnnotation : NSObject<MKAnnotation>
     4 
     5 //MKAnnotation协议里面必须实现的属性
     6 @property (nonatomic) CLLocationCoordinate2D coordinate;
     7 
     8 //MKAnnotation协议里面的可选属性
     9 @property (nonatomic,  copy) NSString *title;
    10 @property (nonatomic,  copy) NSString *subtitle;
    11 
    12 //设置一个tag值标记区分每一个标注视图(大头针)
    13 @property (nonatomic) NSInteger tag ;
    14 
    15 @end
  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/yyxblogs/p/4872876.html
Copyright © 2011-2022 走看看