MKMapView的使用
#import "ViewController.h"
#import "BVAnnotation.h"
@interface ViewController ()<MKMapViewDelegate>
{
CLLocationManager *locationManager;//声明管理者对象
MKMapView *_mapView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 初始化管理者对象
locationManager = [[CLLocationManager alloc]init];
// 2.判断系统服务是否开启
if (![CLLocationManager locationServicesEnabled]) {
NSLog(@"系统服务未开启");
}
// 3.判断授权状态
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {
//如果是未授权状态时,则进行授权
// 授权是要修改plist文件
if ([[[UIDevice currentDevice]systemVersion]floatValue]>= 8.0) {
[locationManager requestWhenInUseAuthorization];
}
}
// 创建MKMapView
_mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];
// 设置mapview的属性
// 设置mapView的跟踪模式
_mapView.userTrackingMode = MKUserTrackingModeFollow;
// 设置mapView的类型
_mapView.mapType = MKMapTypeStandard;
// 设置代理
_mapView.delegate = self;
[self.view addSubview:_mapView];
#pragma-mark 添加button 用来控制回到定位的位置中心点
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(10, self.view.bounds.size.height-50-10, 80, 50)];
btn.backgroundColor = [UIColor cyanColor];
[btn addTarget:self action:@selector(btnAction:) forControlEvents:
UIControlEventTouchUpInside];
[self.view addSubview:btn];
#pragma -mark 通过点击手势添加大头针
UITapGestureRecognizer *tap =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(follow:)];
[_mapView addGestureRecognizer:tap];
}
#pragma -mark 通过点击手势添加大头针的点击方法
-(void)follow:(UITapGestureRecognizer *)tap{
CGPoint point = [tap locationInView:_mapView];
// 把坐标点转换成地理坐标
CLLocationCoordinate2D coordinate = [_mapView convertPoint:point toCoordinateFromView:_mapView];
// 在该地理坐标位置创建大头针
BVAnnotation *annotation = [[BVAnnotation alloc]init];
annotation.coordinate = coordinate;
annotation.title = @"中华大地";
annotation.subtitle = @"欢迎你";
annotation.image = [UIImage imageNamed:@"category_4"];
[_mapView addAnnotation:annotation];
}
#pragma -mark 自定义大头针的样式
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
// 判断这个大头针是不是系统定位的大头针 如果是,则不用重新定义
// 方法的使用类似于UiTableViewCell的创建和复用
if ([annotation isKindOfClass: [BVAnnotation class]])
{
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"annotationView"];
if (annotationView == nil) {
annotationView = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"annotationView"];
// 设置选中时显示详情框
annotationView.canShowCallout = YES;
// 添加辅助视图(左右两边)
annotationView.leftCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
// annotationView.image = [UIImage imageNamed:@""];
}
annotationView.annotation = annotation;
annotationView.image = ((BVAnnotation *)annotation).image;
return annotationView;
}
return nil;
}
#pragma -mark 回到定位的位置的but事件响应的方法
-(void)btnAction:(UIButton *)button{
[ _mapView setCenterCoordinate:_mapView.userLocation.location.coordinate animated:YES];
}
#pragma -mark 代理方法
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
// 完成位置更新的代理方法
NSLog(@"完成更新");
// 设置地图显示区域
MKCoordinateSpan span = MKCoordinateSpanMake(1, 1);
MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.coordinate, span);
[mapView setRegion:region];
}
-(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView{
// 地图完成加载
NSLog(@"完成加载");
}
========BVAnnotation==========
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface BVAnnotation : NSObject<MKAnnotation>
//重新定义协议里的属性
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic,copy) NSString *subtitle;
@property(nonatomic,retain)UIImage *image;
@end
MKMapView的使用的更多相关文章
- iOS - MKMapView 地图
1.创建 MKMapView 地图 在 iOS6 或者 iOS7 中实现这个功能只需要添加地图控件.设置用户跟踪模式.在 mapView:didUpdateUserLocation: 代理方法中设置地 ...
- iOS 原生地图(MapKit、MKMapView)轨迹渐变
WechatIMG2.png 项目已接入高德地图,并且大部分功能已经实现好,但BOSS觉得iOS自带的地图效果更好...本着面向老板编程的思想,换之.还好,高德地图是在MapKit上封装的,大部分ap ...
- CoreLocation MKMapView 地图
系统自带地图 框架: CoreLocation MapKit CLLocationManager --> 定位管理者 CLGeocoder --> 地理编码器 MKMapView -- ...
- MKMapView的内存释放问题
MKMapView的内存释放问题 by 伍雪颖 - (void)dealloc { self.mapView.showsUserLocation = NO; self.mapView.userTrac ...
- CoreLocation MKMapView
高德开发者平台 有开发指南 iOS9配置网络: <key>NSAppTransportSecurity</key> <dict> <key>NSAllo ...
- MKMapView and Zoom Levels: A Visual Guide
原帖:http://troybrant.net/blog/2010/01/mkmapview-and-zoom-levels-a-visual-guide/ So, how exactly does ...
- MKMapView移动事件地图
MKMapView移动事件地图 by 吴雪莹 -(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated { ...
- iOS 8中CLLocationManager及MKMapView showUserLocation失败的解决的方法
用XCode 6编译的原来XCode 5.1.1写的程序时,发现原来写的CLLocationManager定位的代码以及MKmapView的showUserLocation失效.查了一下,XCode ...
- [ios]MKMapView中使用MKPolyline画线
参考:http://blog.sina.com.cn/s/blog_9e8867eb0101dt76.html 首先在MapView.h中 #import <MapKit/MapKit.h> ...
随机推荐
- Python基础篇【第1篇】: Python基础
Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有 ...
- Windows下使用命令行启动php
E:\xampp\php>php-cgi.exe -b 127.0.0.1:9000 -c php.ini
- win7访问ubuntu所在分区
用ext2explore就可以了
- 洛谷P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 Too many or Too few lines 样例解释有问题 ...
- 洛谷P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...
- PL/SQL 查找1-100之间的素数
--实现查找1-100之间的素数 declare v_no ; --标记是第几个素数 v_number number; --表示1-100之间的数 v_num number; begin .. loo ...
- iOS 关于僵尸对象和僵尸指针的那些事儿
引言 提到僵尸就感到一种恐怖,大家都知道“僵尸”是没有生命的,但是它确实是一种存在的类似生命体的一种生物.哈哈,当然本文的重点不是讨论“僵尸”,而是有关于ios当中经常遇到的僵尸指针(Zombie P ...
- linux tr命令详解
通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来除去重复 ...
- enum 枚举的使用
在程序当中,我们经常定义一些常量来标识一些状态,类型等. 比如 定义订单的状态,可以定义为ORDER_STATUS_CANCEL = 1 表示订单状态为"订单已取消". 但是感觉定 ...
- rutime中动态调用类的方法
Dynamically invoke a class method in Objective C 代码 #import <Foundation/Foundation.h> #import ...