//
// ViewController.m
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
#import "Annotation.h"
@interface ViewController ()<CLLocationManagerDelegate,MKMapViewDelegate>
/**
* 位置管理者对象
*/
@property(nonatomic,strong) CLLocationManager *locMgr;
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end
@implementation ViewController
/**
* 延迟创建定位管理者对象
*/
- (CLLocationManager *)locMgr
{
//如果定位服务不可用,加一个判断
if(![CLLocationManager locationServicesEnabled]) return nil;
if (_locMgr == nil) {
//创建定位管理者对象
self.locMgr =[[CLLocationManager alloc]init];
//设置代理
self.locMgr.delegate = self;
}
return _locMgr;
}
- (void)viewDidLoad {
[super viewDidLoad];
//用户授权
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
[self.locMgr requestWhenInUseAuthorization]; //调用了这句,就会弹出允许框了.
}
//1.根据用户位置
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
//2.设置代理
self.mapView.delegate = self;
//3.监听mapView的点击事件
[self.mapView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMapView:)]];
}
/**
* 监听mapView的点击事件
*
* @param tap 手势识别器
*/
- (void)tapMapView:(UITapGestureRecognizer *)tap
{
//1.获得用户在mapView上点击的位置(x,y)
CGPoint point = [tap locationInView:tap.view];
//2.转成经纬度
CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
//3.创建大头针模型,添加大头针到地图上
Annotation *anno = [[Annotation alloc] init];
anno.coordinate = coordinate;
anno.title = @"标题";
anno.subtitle = @"子标题子标题子标题";
[self.mapView addAnnotation:anno];
}
#pragma mark - MKMapViewDelegate
/**
* 当用户位置更新就会调用
*/
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
//设置地图的显示范围
MKCoordinateSpan span = MKCoordinateSpanMake(0.5, 0.5);
MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.location.coordinate, span);
[mapView setRegion:region];
}
@end
2.需要自定义大头针模型
//
// Annotation.h
// 自定义大头针模型
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface Annotation : NSObject<MKAnnotation>
@property(nonatomic,assign)CLLocationCoordinate2D coordinate;
@property(nonatomic,copy)NSString *title;
@property(nonatomic,copy)NSString *subtitle;
@end
其他:
用大头针沾满整个天朝
- (void)tapMapView:(UITapGestureRecognizer *)tap
{
// //1.获得用户在mapView上点击的位置(x,y)
// CGPoint point = [tap locationInView:tap.view];
//
// //2.转成经纬度
// CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
//
// //3.创建大头针模型,添加大头针到地图上
// Annotation *anno = [[Annotation alloc] init];
// anno.coordinate = coordinate;
// anno.title = @"标题";
// anno.subtitle = @"子标题子标题子标题";
// [self.mapView addAnnotation:anno];
//用大头针沾满整个天朝
// 纬度范围:N 3°51′ ~ N 53°33′
// 经度范围:E 73°33′ ~ E 135°05′
for (int i = 0; i<1000; i++) {
Annotation *anno = [[Annotation alloc] init];
CLLocationDegrees latitude = 4 + arc4random_uniform(50);
CLLocationDegrees longitude = 73 + arc4random_uniform(60);
anno.coordinate = CLLocationCoordinate2DMake(latitude, longitude);
anno.title = @"标题";
anno.subtitle = @"子标题子标题子标题";
[self.mapView addAnnotation:anno];
}
}