iOS地图的显示(大头针)

 1 1.导入主头文件
 2        #import <MapKit/MapKit.h>
 3   MapKit框架使用须知
 4   MapKit框架中所有数据类型的前缀都是MK
 5   MapKit有一个比较重要的UI控件:MKMapView,专门用于地图显示
 6
 7 2.跟踪显示用户的位置
 8
 9     设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置
10     MKUserTrackingModeNone :不跟踪用户的位置
11     MKUserTrackingModeFollow :跟踪并在地图上显示用户的当前位置
12     MKUserTrackingModeFollowWithHeading :跟踪并在地图上显示用户的当前位置,地图会跟随用户的前进方向进行旋转
13 3.地图的类型
14
15 可以通过设置MKMapView的mapType设置地图类型(mapViewType是枚举类型)
16 MKMapTypeStandard // 普通地图(左图)
17 MKMapTypeSatellite // 卫星云图 (中图)
18 MKMapTypeHybrid // 普通地图覆盖于卫星云图之上(右图)
19 MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0) // 地形和建筑物的三维模型
20 MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0) // 显示道路和附加元素的Flyover
 1 MKMapView可以设置一个代理对象,用来监听地图的相关行为,常见的代理方法有:
 2
 3 // 一个位置更改默认只会调用一次,不断监测用户的当前位置时每次都会调用这个方法,把用户的最新位置(userLocation参数)传进来.
 4
 5 - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation;
 6
 7 // 地图的显示区域即将发生改变的时候调用
 8 - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
 9
10 // 地图的显示区域已经发生改变的时候调用
11 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
12
13 MKUserLocation其实是个大头针模型,包括以下属性
14 // 显示在大头针上的标题
15 @property (nonatomic, copy) NSString *title;
16
17 // 显示在大头针上的子标题
18 @property (nonatomic, copy) NSString *subtitle;
19
20 // 地理位置信息(大头针钉在什么地方)
21 @property (readonly, nonatomic) CLLocation *location;
22
23 通过MKMapView的下列方法,可以设置地图显示的位置和区域
24 // 设置地图的中心点位置
25 @property (nonatomic) CLLocationCoordinate2D centerCoordinate;
26
27 -(void)setCenterCoordinate: (CLLocationCoordinate2D)coordinate animated:(BOOL)animated;
28
29 @property (nonatomic) MKCoordinateRegion region;
30 - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

大头针模型

 1 新建一个大头针模型类
 2 #import <MapKit/MapKit.h>
 3 @interface MyAnnonation : NSObject <MKAnnotation>
 4 /** 坐标位置 */
 5 @property (nonatomic, assign) CLLocationCoordinate2D coordinate;
 6 /** 标题 */
 7 @property (nonatomic, copy) NSString *title;
 8 /** 子标题 */
 9 @property (nonatomic, copy) NSString *subtitle;
10 @end
 1 #pragma mark - 添加大头针
 2 - (void)addAnnotation
 3 {
 4     // 设置位置
 5     CLLocationCoordinate2D location1 = CLLocationCoordinate2DMake(40, 116);
 6     MyAnnotation *annotation = [[MyAnnotation alloc] init];
 7
 8     annotation.coordinate = location1;
 9     annotation.title = @"BeiJing";
10     annotation.subtitle = @"Myhome";
11 #warning 添加代码
12     annotation.image = [UIImage imageNamed:@"88"];
13     [_mapView addAnnotation:annotation];
14     MyAnnotation *annotation2 = [[MyAnnotation alloc] init];
15     CLLocationCoordinate2D location2 = CLLocationCoordinate2DMake(39, 121);
16     annotation2.coordinate = location2;
17     annotation2.title = @"DaLian";
18     annotation2.subtitle = @"Hishome";
19     [_mapView addAnnotation:annotation2];
20     MyAnnotation *annotation3 = [[MyAnnotation alloc] init];
21
22     CLLocationCoordinate2D location3 = CLLocationCoordinate2DMake(34, 113);
23     annotation3.coordinate = location3;
24     annotation3.title = @"zhengzhou";
25     annotation3.subtitle = @"herhome";
26     [_mapView addAnnotation:annotation3];
27 }
 1 // 添加一个大头针
 2 - (void)addAnnotation:(id <MKAnnotation>)annotation;
 3
 4
 5 // 添加多个大头针
 6 - (void)addAnnotations:(NSArray *)annotations;
 7
 8 // 移除一个大头针
 9 - (void)removeAnnotation:(id <MKAnnotation>)annotation;
10
11 // 移除多个大头针
12 - (void)removeAnnotations:(NSArray *)annotations;

自定义大头针

 1 设置MKMapView的代理
 2 实现下面的代理方法,返回大头针控件
 3
 4 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;
 5 根据传进来的(id <MKAnnotation>)annotation参数创建并返回对应的大头针控件
 6 代理方法的使用注意
 7 如果返回nil,显示出来的大头针就采取系统的默认样式
 8
 9 标识用户位置的蓝色发光圆点,它也是一个大头针,当显示这个大头针时,也会调用代理方法
10
11 因此,需要在代理方法中分清楚(id <MKAnnotation>)annotation参数代表自定义的大头针还是蓝色发光圆点
12 地图上的大头针控件是MKAnnotationView
13
14 MKAnnotationView的属性
15
16 // 大头针模型
17 @property (nonatomic, strong) id <MKAnnotation> annotation;
18
19 // 显示的图片
20 @property (nonatomic, strong) UIImage *image;
21
22 // 是否显示标注
23 @property (nonatomic) BOOL canShowCallout;
24
25 // 标注的偏移量
26 @property (nonatomic) CGPoint calloutOffset;
27 // 标注右边显示什么控件
28 @property (strong, nonatomic) UIView *rightCalloutAccessoryView;
29
30 // 标注左边显示什么控件
31 @property (strong, nonatomic) UIView *leftCalloutAccessoryView;
32
33 MKPinAnnotationView是MKAnnotationView的子类
34
35 MKPinAnnotationView比MKAnnotationView多了2个属性
36
37 // 大头针颜色
38 @property (nonatomic) MKPinAnnotationColor pinColor;
39
40 // 大头针第一次显示时是否从天而降
41 @property (nonatomic) BOOL animatesDrop;
42
43 CLLocationManager 定位的基础信息
44 CLLocation  位置的地理信息
45 CLLocationCoordinate2D  存放经纬度的结构体
46 CLGeocoder地理位置编码与反编码的类
47 CLPlacemark 地标.
48 MKMapView 基础地图
49 MKUserLocation  大头针模型
50 MKCoordinateRegion  显示区域的结构体
51 MKAnnotationView 自定义大头针控件
  1 #import "ViewController.h"
  2
  3 // 地图使用的框架是MapKit
  4 // 引入框架
  5 #import <MapKit/MapKit.h>
  6 #import <CoreLocation/CoreLocation.h>
  7 #import "MyAnnotation.h"
  8 @interface ViewController ()<MKMapViewDelegate>
  9
 10 // 定位管理器
 11 @property (nonatomic, strong) CLLocationManager *locationManager;
 12
 13 // 显示地图的视图
 14 @property (nonatomic, strong) MKMapView *mapView;
 15 @end
 16
 17 @implementation ViewController
 18
 19 - (void)viewDidLoad {
 20     [super viewDidLoad];
 21     // Do any additional setup after loading the view, typically from a nib.
 22     /*
 23     大头针:
 24     在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的“大头针”。只要一个NSObject类实现MKAnnotation协议就可以作为一个大头针,通常会重写协议中coordinate(标记位置)、title(标题)、subtitle(子标题)三个属性,然后在程序中创建大头针对象并调用addAnnotation:方法添加大头针即可(之所以iOS没有定义一个基类实现这个协议供开发者使用,多数原因应该是MKAnnotation是一个模型对象,对于多数应用模型会稍有不同,例如后面的内容中会给大头针模型对象添加其他属性)。
 25     */
 26     // 创建视图
 27     [self createMapView];
 28
 29 }
 30
 31 #pragma mark - 创建视图
 32 - (void)createMapView
 33 {
 34     // 创建地图,并添加到当前视图上
 35     self.mapView = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];
 36     [self.view addSubview:self.mapView];
 37     // 设置代理
 38     _mapView.delegate = self;
 39
 40     // 定位的设置
 41     self.locationManager = [[CLLocationManager alloc] init];
 42     // 判断是否可用
 43     if (![CLLocationManager locationServicesEnabled]) {
 44         NSLog(@"当前设备定位不可用");
 45     }
 46     //
 47     if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
 48         [self.locationManager requestWhenInUseAuthorization];
 49     }
 50
 51     // 设置地图的定位追踪
 52     _mapView.userTrackingMode = MKUserTrackingModeFollow;
 53
 54     // 设置地图的类型
 55     _mapView.mapType = MKMapTypeStandard;
 56
 57     // 添加大头针
 58     [self addAnnotation];
 59
 60 }
 61
 62 #pragma mark - 添加大头针
 63 - (void)addAnnotation
 64 {
 65     // 设置位置
 66     CLLocationCoordinate2D location1 = CLLocationCoordinate2DMake(40, 116);
 67     MyAnnotation *annotation = [[MyAnnotation alloc] init];
 68
 69     annotation.coordinate = location1;
 70     annotation.title = @"BeiJing";
 71     annotation.subtitle = @"Myhome";
 72 #warning 添加代码
 73     annotation.image = [UIImage imageNamed:@"88"];
 74     [_mapView addAnnotation:annotation];
 75     MyAnnotation *annotation2 = [[MyAnnotation alloc] init];
 76     CLLocationCoordinate2D location2 = CLLocationCoordinate2DMake(39, 121);
 77     annotation2.coordinate = location2;
 78     annotation2.title = @"DaLian";
 79     annotation2.subtitle = @"Hishome";
 80     [_mapView addAnnotation:annotation2];
 81     MyAnnotation *annotation3 = [[MyAnnotation alloc] init];
 82
 83     CLLocationCoordinate2D location3 = CLLocationCoordinate2DMake(34, 113);
 84     annotation3.coordinate = location3;
 85     annotation3.title = @"zhengzhou";
 86     annotation3.subtitle = @"herhome";
 87     [_mapView addAnnotation:annotation3];
 88 }
 89
 90 #pragma mark - 代理方法
 91 - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
 92 {
 93     NSLog(@"=====%@", userLocation);
 94 }
 95
 96 #pragma mark - 实现自定义大头针视图的代理方法
 97 // 显示大头针的时候才会调用
 98 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
 99 {
100     // 判断是否是当前自定义的大头针类
101     if ([annotation isKindOfClass:[MyAnnotation class]]) {
102
103         // 先定义一个重用标识
104         static NSString *identifier = @"Annotation";
105         MKAnnotationView *annotationView =[_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
106         // 重用机制
107         if (!annotationView) {
108             annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
109             // 允许用户交互
110             annotationView.canShowCallout = YES;
111             // 设置详情和大头针的头偏移量
112             annotationView.calloutOffset = CGPointMake(0, 1);
113             // 设置详情的左视图
114             annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"88"]];
115
116         }
117         // 修改大头针视图
118
119         annotationView.annotation = annotation;
120         // 强转
121         annotationView.image = ((MyAnnotation *)annotation).image;
122
123         return annotationView;
124
125
126     } else {
127         return nil;
128     }
129 }
时间: 2024-11-08 19:24:58

iOS地图的显示(大头针)的相关文章

iOS 地图(添加大头针)

首先在工程中导入MapKit.framework库文件 1 #import <UIKit/UIKit.h> 2 3 @interface AppDelegate : UIResponder <UIApplicationDelegate> 4 5 @property (strong, nonatomic) UIWindow *window; 6 7 @end 1 #import "AppDelegate.h" 2 #import "RootViewCon

iOS 地图中自定义大头针

1.继承MKAnnotationView. HYAnnotationView.h文件: + (instancetype)annotationViewWithMapView:(MKMapView *)mapView; HYAnnotationView.m文件: #import "HYAnnotation.h"//导入大头针model的头文件 @interface HYAnnotationView() @property (nonatomic, weak) UIImageView *ico

iOS地图中添加大头针

首先,我们得新建一个遵守MKAnnotation的对象,并且拥有以下几个属性: @interface LHAnnotation : NSObject<MKAnnotation> // Center latitude and longitude of the annotion view. // The implementation of this property must be KVO compliant. @property (nonatomic, assign) CLLocationCoo

MapKit之大头针全面解析(使用系统大头针、自定义大头针callout视图、使用图片显示大头针)

首先了解一些相关知识点: 添加大头针到地图 在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的"大头针".大头针(Annotations)提供了一种方式来突出地图中具体的位置并可以提供相关的信息.我们能够使用大头针标记具体的地址,兴趣点和其他类型的目的地.当显示在地图上的时候,大头针可以使用图片作为标识,也能够点击大头针弹出小弹框提供相应的链接和具体内容.Figure6-1显示了系统标准的大头针样式标记具体的位置,并提供了小弹框显示额外的信息,使用箭头提示用户点击获取

iOS地图

地图 1.主要用到了地图展示和定位功能 CoreLocation框架的使用: 导入头文件        #import <CoreLocation/CoreLocation.h>CoreLocation框架使用须知        CoreLocation框架中所有数据类型的前缀都是CL        CoreLocation中使用CLLocationManager对象来做用户定位 1.引入头文件 #import <CoreLocation/CoreLocation.h> 2.声明属

iOS 输入地点 显示当前位置地图并用大头针标注

废话不多说 直接上项目工程  ,还是 先看下效果图吧! 项目中有两个文件,chonViewController 和mapLocation文件 ,mapLocation 文件用于地标显示 并有附加信息,昨天做得时候附加信息显示正常,今天想写点博客 却不显示了 ,很郁闷! 新建工程后 记得加入类库,MapKit.framework 具体添加方法 这里不在说明了 下面 看下 chonViewController.h 文件 代码如下: #import <UIKit/UIKit.h> #import &

iOS:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息

如何添加大头针(地标): 通过MapView的addAnnotation方法可以添加一个大头针到地图上 通过MapView的addAnnotations方法可以添加多个大头针到地图上 –(void)addAnnotation:(id <MKAnnotation>)annotation; 说明:需要传入一个遵守了MKAnnotation协议的对象 基本步骤为: <1>新建一个遵守MKAnnotation协议的类: @interface MyAnnotation : NSObject 

IOS中MapKit框架使用地图的显示

1.导入主头文件 #import <MapKit/MapKit.h> MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK MapKit有一个比较重要的UI控件 :MKMapView,专门用于地图显示 2. 设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置 MKUserTrackingModeNone :不跟踪用户的位置 MKUserTrackingModeFollow :跟踪并在地图上显示用户的当前位置 MKUserTrackingMo

iOS学习_地图_添加大头针

首先要引入#import <MapKit/MapKit.h>框架 创建一个继承与NSObject的类;用于声明属性 接下来在ViewController中实现相关的操作 引入头文件 #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> #import "MyAnnotation.h" 定义相应的属性 //定位管理器 @property(nonatomic,strong)CLLo