MapKit
导入MapKit.framework、CoreLocation.framework
自定义两个类:
一个实现MKAnnotation协议,一般用来存放数据
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; //必须,而且要在初始化或写set方法赋值
@property (nonatomic, readonly, copy) NSString *title; //如果要响应点击事件,不能返回nil
@property (nonatomic, readonly, copy) NSString *subtitle;
一个继承自MKAnnotationView,大头针显示视图
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier; //复写初始化类
self.annotation; //本身的属性(上面初始化被赋值),可以调用
//初始化一个MKMapView对象
- (void)_initMapView{
定义MKMapView对象
MKMapView *mapView = [[MKMapView alloc] initWithFrame:(CGRect)];
mapView.delegate = self; //MKMapViewDelegate协议方法
_mapView.mapType = MKMapTypeStandard;
_mapView.showsUserLocation = NO;
[self.view addSubView:mapView];
//定位
_locationManager = [[CLLocationManager alloc] init];
[_locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
_locationManager.delegate = self; //CLLocationManagerDelegate协议方法
_locationManager.desiredAccuracy = kCLLocationAccuracyBest; //定位精确度
_locationManager.distanceFilter = 100; //设备移动超过100米更新定位,调用代理方法
[_locationManager startUpdatingLocation];
}
//数据处理
- (void)_loadData {
//创建标注对象,自定义 实现MKAnnotation协议 的类 PersonAnnotation
PersonAnnotation *anotation = [[PersonAnnotation alloc] initWithWeibo:weibo];
//向地图上添加标注视图
[mapView addAnnotation:anotation];
}
#pragma mark -CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
CLLocation *location = locations.lastObject;
CLLocationCoordinate2D coordinate = location.coordinate;
//停止定位
[manager stopUpdatingLocation];
//设置地图的显示区域
MKCoordinateSpan span = {0.1,0.1};
MKCoordinateRegion region = {coordinate,span};
[mapView setRegion:region];
}
#pragma mark -MKMapViewDelegate //类似UITableView的设置cell的方法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) { //不是自定义的
return nil;
}
static NSString *identify = @"identifier";
//自定义的 继承自MKAnnotationView 的类 PersonAnnotationView
PersonAnnotationView *annotationView = (PersonAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identify];
if (annotationView == nil) {
anotationView = [[PersonAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identify];
}
anotationView.annotation = annotation;
return anotationView;
}
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view; //点击响应方法
MapKit简单使用
最新推荐文章于 2020-08-26 11:51:20 发布