#import <CoreLocation/CoreLocation.h>
#import "MyAnimation.h"
//地图使用的框架是MapKit
/*大头针:
在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的“大头针”。只要一个NSObject类实现MKAnnotation协议就可以作为一个大头针,通常会重写协议中coordinate(标记位置)、title(标题)、subtitle(子标题)三个属性,然后在程序中创建大头针对象并调用addAnnotation:方法添加大头针即可(之所以iOS没有定义一个基类实现这个协议供开发者使用,多数原因应该是MKAnnotation是一个模型对象,对于多数应用模型会稍有不同,例如后面的内容中会给大头针模型对象添加其他属性)。*/
####################属性######################
##################对象方法######################
#################代理方法#######################
################自定义大头针视图###################
代码:
1.先定义一个继承NSObject的类,并在类中重写协议的三个属性:coordinate(标记位置),title(标题),subtitle(子标题)三个属性
@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic,copy) NSString *title;
@property (nonatomic,copy) NSString *subtitle;
//自定义大头针
//自定义大头针显示图片的
@property (nonatomic,strong) UIImage *image;
2.回到viewController里写内容
//定位管理器
@property (nonatomic,strong) CLLocationManager *locationManager;
//显示地图的视图
@property (nonatomic,strong) MKMapView *mapView;
- (void) viewDidLoad {
[self createMapView];
}
#pragma mark - 创建视图
- (void) createMapView {
self.mapView = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view addSubview :self.mapView];
//设置代理
self.mapView.delegate = self;
//定位
self.locationManager = [[CLLocationManager alloc] init];
if(![CLLocationManager locationSevicesEnabled]) {
NSLog(@"当前设备定位不可用");
}
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse){
[self.locationManager requestWhenInUseAuthorization];
}
//设置地图的定位追踪
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
//设置地图的显示类型
self.mapView.mapType = MKMapTypeStandard;
//添加大头针
[self addAnnotation];
}
#pragma mark - 添加大头针
- (void) addAnnotation {
//设置位置
CLLocationCoordinate2D location1 = CLLocationCoordinate2DMake(40,116);
//大头针-北京
MyAnimation *annotation = [[MyAnimation alloc] init];
annotation.coordinate = location1;
annotation.title = @"Beijing";
annotation.subtitle = @"Anana~s home";
//添加image图片
annotation.image = [UIImage imageNamed:@"1.jpg"];
[self.mapView addAnnotation : annotation];
}
#pragma mark - 代理方法
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
NSLog(@"%@",userLocation);
}
#pragma mark - 实现自定义大头针视图的代理方法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
//判断是否是当前自定义的大头针类
if([annotation isKindOfClass :[MyAnimation class]]){
//先定义一个重用标识
static NSString *identifier = @"AnnotationOne";
MKAnnotationView *annotationView = [self.mapView dequeueReusableAnnotation ViewWithIdentifier : identifier];
if(!annotationView){
annotationView = [[MKAnnotationView alloc] initWithAnnotation : annotation resueIdentifier : identifier];
//允许用户交互
annotationView.canShowCallout = YES;
//设置详情和大头针的头偏移量
annotationView.calloutOffset = CGPointMake(0,1);
//设置详情的左视图
annotationView.leftCalloutAccessoryView = [[UIImageView alloc]initWithImage:[UIImage imageName:@"1.jpg"]];
}
//修改大头针视图
annotationView.annotation = annotation;
annotationView.image = ((MyAnimationg *)annotation).image;
return annotationVie;
}else {
return nil;
}
}