IOS地图与定位MapKit

MapKit是IOS的一个地图导航的库,通过对MapKit扩展能够实现基于地理位置的APP。下面就来讲一下关于MapKit的基础,方便初学者入门。
初识MapKit 首先需要导入MapKit.framework库。 然后创建MKMapView视图 代码

// 实例化地图视图MKMapView *mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];[self.view addSubview:mapView];[mapView setDelegate:self];// 允许跟踪用户位置[mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];// 设置地图类型[mapView setMapType:MKMapTypeHybrid];
在创建MKMapView视图之后为其赋值两个属性,这两个属性的作用分别是跟踪用户位置和设置地图类型。 MKMapView允许设置是否跟踪用户位置 MKUserTrackingModeNone = 0              不跟踪用户位置
MKUserTrackingModeFollow              
  跟踪用户位置
MKUserTrackingModeFollowWithHeading   
  带方向跟踪用户位置
MKMapView提供三种地图类型
MKMapTypeStandard = 0,                  标准地图
MKMapTypeSatellite,                   
  卫星地图
MKMapTypeHybrid                       
  混合地图

地标 MapKit除了能够向我们展示当前所在位置,还能够通过大头针(地标)对地图上的位置进行标注。 凡是遵守 MKAnnotation 协议的对象都可以成为大头针。
所以我们可以创建一个CustomAnnotation对象并使其遵守 MKAnnotation协议 代码
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
可以看到大头针默认有三个属性,分别是经纬度,标题和副标题。其中经纬度用来指定其在地图的位置,而标题和副标题用来显示提示内容。 MapKit支持自定义大头针,所以我们可以为 CustomAnnotation增加属性。 代码
@property (nonatomic, strong) NSString *icon;
增加一个图标属性 在MapKit当中使用大头针需要对其实例化,并设置属性,最后将其实例加入。 代码
 // 实例化自定义大头针CustomAnnotation *annoOne = [[CustomAnnotation alloc]init];// 大头针默认属性annoOne.coordinate = coord;annoOne.title = @"北京市";annoOne.subtitle = @"海淀区";// 大头针自定义属性annoOne.icon = @"head.jpg";[_mapView addAnnotation:annoOne];
代理 大头针实例化完成之后,我们可以通过代理方法实现自定义的大头针视图。 代码
#pragma mark - MapKit代理方法
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{NSLog(@"位置信息%@ 标题信息%@", userLocation.location, userLocation.title);// 利用location中的经纬度设置地图的显示区域,IOS7之后必须MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, 100.0, 100.0);// 设置地图的显示区域,以用户所在位置为中心点,半径为100米[mapView setRegion:region animated:YES];
}#pragma mark - 自定义大头针视图
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
{if (![annotation isKindOfClass:[CustomAnnotation class]]) {return nil;}// 视图重用策略static NSString *ID = @"ID";MKAnnotationView *view = [mapView dequeueReusableAnnotationViewWithIdentifier:ID];if (view == nil) {view = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:ID];view.canShowCallout = YES;}[view setAnnotation:annotation];[view setImage:[UIImage imageNamed:((CustomAnnotation *)annotation).icon]];return view;
}

第一个代理方法,用来获得变化的用户位置信息。第二个代理方法即自定义大头针视图的方法。自定义大头针视图,与UITableViewCell类似,其大头针视图能够被重用,所以需要对其设置标记。






本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部