iOS9下的Map Kit View下的使用
最近有个任务是关于地理位置上的标注开发,经过一些资料的查找和对比,现总结一些经验,给读者也是给自己。
iOS9下的Map Kit View实际是以前MapKit,只不过换了一个名字,实际是指同一个UI控件,当然Map Kit View在经过几代的发展,已经有不少新功能,为了节省时间,从storyboard上开发。
之后在设置的General上的Link Framework and Libraries添加MapKit.framework和CoreLocation.framework,iOS8之后的MapKit开发都需要添加CoreLocation.framework,因为apple对用户隐私作出了保护,需要适配才可使用MapKit
UI的布局如上图所示,一个Map Kit View和UIButton
在文件结构上,首先创建一个类MyAnnotation,继承自NSObject,因为大头针是由MKAnnotation控制的,所以也需要在后面加一个协议<MKAnnotation>,按住Command点击进去,会发现一个必须用的属性,还有两个可选的属性,不要忘记import MapKit头部
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface MyAnnotation : NSObject <MKAnnotation> @property (nonatomic, assign) CLLocationCoordinate2D coordinate; @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *subtitle; @end
.m文件闲置即可
让我们回到ViewController.m上
导入MapKit和CoreLocation、MyAnnotation文件,加上MapKitViewDelegate和CLLocationManagerDelegate协议,将storyboard上的Map Kit View拖拉到该文件上,同时UIButton也绑定Action方法,最后,需要创建CLLocationManager成员变量,为的是能在iOS8之后能使用地理位置,代码如下:
#import "ViewController.h" #import "MyAnnotation.h" #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> @interface ViewController () <MKMapViewDelegate , CLLocationManagerDelegate> @property (weak, nonatomic) IBOutlet MKMapView *mapView; - (IBAction)addAnnotation; @property (nonatomic ,strong) CLLocationManager *manager;
之后添加各种代理方法,使得大头针能在地图上显示
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
iOS8之后,Apple的策略改变,获取地址需要经过用户允许
info.plist的操作网上很多教程,要引出地址使用,需要做判断,代码如下:
CLLocationManager *manager = [[CLLocationManager alloc] init]; _manager = manager; if ([CLLocationManager locationServicesEnabled]) { _manager.desiredAccuracy = kCLLocationAccuracyBest; _manager.distanceFilter = 1000; _manager.delegate = self; if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { [self.manager requestAlwaysAuthorization]; } else { [self.manager startUpdatingLocation]; } }
之后下面的方法才生效,不然看不到自己目前的位置
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
一般这样设置后,Map Kit View已经能使用,更多高级的用法等我的项目完成后和大家分享,并如何避免入坑。
- 关于使用MAPVIEWOFFILE大文件的读写(DELPHI版)
- mapview使用方法
- 自定义View—使用clipPath或者BitmapShader实现圆角图片
- MKAnnotationView,MKAnnotation与MKMapView结合使用显示坐标点
- iOS9中UIStackView的使用
- (原创)android中使用Baidu Map遇到的问题之:移动Mapview上的放大缩小控件
- Google Map Android api V2 中使用MapView遇到CameraUpdateFactory is not initialized!的解决办法
- 【实用】iOS开发iOS9中使用UIAlertView,弹窗消失时出现键盘闪现,导致输入框出现在屏幕中。
- android中使用Baidu Map遇到的问题之:移动Mapview上的放大缩小控件
- MapView使用示例
- Google Map Android api V2 中使用MapView遇到CameraUpdateFactory is not initialized!的解决办法
- SpringMVC学习 -- ModelAndView , Model , ModelMap , Map 及 @SessionAttributes 的使用
- iOS9 视频播放器 AVPlayerViewController的简单使用
- iOS Cllocationmanger定位, 使用Google Map API在mapview上画路径
- MapView的使用 之 最新帖
- Android 百度地图使用时出现inflating class com.baidu.mapapi.map.MapView错误的解决方案
- GoogleMap_IOS 在MapView中使用地图钉
- iOS9使用提示框的正确实现方式(UIAlertView is deprecated)
- 使用mapview导shp数据到oracle spatial