定位 - MapKit-自定义大头针
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface PPAnnotation : NSObject<MKAnnotation>
/**
* 大头针的位置
*/
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
/**
* 大头针标题
*/
@property (nonatomic, copy) NSString *title;
/**
* 大头针的子标题
*/
@property (nonatomic, copy) NSString *subtitle;
/**
* 图标
*/
@property (nonatomic, copy) NSString *icon;
@end
------------------------------------------------------------------------------------------------------------------
#import <MapKit/MapKit.h>
@interface PPAnnotationView : MKAnnotationView
/**
* 快速创建 大头针
*
* @param mapView mapView
*/
+ (instancetype)annotationViewWithMap:(MKMapView *)mapView;
@end
#import "PPAnnotationView.h"
#import "PPAnnotation.h"
@implementation PPAnnotationView
- (instancetype)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]) {
// 初始化
// 设置显示标题
self.canShowCallout = YES;
// 设置辅助视图
self.leftCalloutAccessoryView = [[UISwitch alloc] init];
self.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
}
return self;
}
+ (instancetype)annotationViewWithMap:(MKMapView *)mapView
{
static NSString *ID = @"anno";
// 1. 从缓存中取
// [注意] 默认情况下, MKAnnotationView 是无法显示的, 如果想自定义大头针, 需要使用MKAnnotationView的子类 MKPinAnnotationView
// [注意] 如果是自定义的大头针, 默认情况点击大头针不会显示标题和副标题, 需要手动设置显示
// MKPinAnnotationView *annoView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
PPAnnotationView *annoView = (PPAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
// 2. 如果缓存中没有, 创建一个新的大头针
if (annoView == nil) {
annoView = [[PPAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:ID];
}
return annoView;
}
//- (void)setAnnotation:(id<MKAnnotation>)annotation
- (void)setAnnotation:(PPAnnotation *)annotation
{
[super setAnnotation:annotation];
// 处理自己特有的操作
self.image = [UIImage imageNamed:annotation.icon];
}
@end
---------------------------------------------------------------------------------------------
#import "ViewController.h"
//#import <MapKit/MapKit.h>
#import "PPAnnotation.h"
#import "PPAnnotationView.h"
@interface ViewController ()<MKMapViewDelegate>
/**
* 地图
*/
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (nonatomic, strong) CLLocationManager *mgr;
@property (nonatomic, strong) CLGeocoder *geocoder;
@end
@implementation ViewController
/**
* 添加大头针
*/
- (IBAction)addAnnotation:(id)sender {
PPAnnotation * annotation = [[PPAnnotation alloc] init];
annotation.title = @"北京智德创辉网络科技有限公司";
annotation.subtitle = @"RO";
annotation.icon = @"category_4";
CGFloat latitude = 39.915094 + arc4random_uniform(20);
CGFloat longitude = 116.487775 + arc4random_uniform(20);
annotation.coordinate = CLLocationCoordinate2DMake(latitude, longitude);
[self.mapView addAnnotation:annotation];
}
- (CLLocationManager *)mgr{
if (!_mgr) {
_mgr = [[CLLocationManager alloc] init];
}
return _mgr;
}
- (CLGeocoder *)geocoder{
if (!_geocoder) {
_geocoder = [[CLGeocoder alloc] init];
}
return _geocoder;
}
- (void)viewDidLoad {
[super viewDidLoad];
// ios 8
if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
[self.mgr requestAlwaysAuthorization];
}
// 设置代理
self.mapView.delegate = self;
// 设置模式
self.mapView.mapType = MKMapTypeStandard;
// 设置跟踪
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
// 设置xuanzhuan
self.mapView.rotateEnabled = NO;
}
#pragma mark -MKMapViewDelegate
/**
* 每次添加大头针 都会调用此方法
*
* @param mapView 地图
* @param annotation 大头针模型
*/
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
LogYellow(@"%@",annotation);
// 对用户当前位置的大头针, 特殊处理 - MKUserLocation
if(![annotation isKindOfClass:[PPAnnotation class]]){
return nil;
}
// 1. 创建大头针
PPAnnotationView *annoView = [PPAnnotationView annotationViewWithMap:mapView];
// 2. 设置模型
annoView.annotation = annotation;
// 3. 返回大头针
return annoView;
}
/**
* 地图区域改变完成 会调用此方法
*/
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
NSLog(@"地图区域改变完成");
/**
*
CLLocationCoordinate2D center;
MKCoordinateSpan span;
*/
LogRed(@"%f --- %f",self.mapView.region.span.latitudeDelta, self.mapView.region.span.longitudeDelta);
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
[self.geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *placemark = [placemarks firstObject];
userLocation.title = placemark.name;
userLocation.subtitle = placemark.locality;
}];
// 移动地图到当前用户所在位置
[self.mapView setCenterCoordinate:userLocation.location.coordinate animated:YES];
/*
// 设置地图显示的区域
CLLocationCoordinate2D center = userLocation.location.coordinate;
// 指定经纬度的跨度
MKCoordinateSpan span = MKCoordinateSpanMake(0.001, 0.0001);
// 将用户的当前位置 设置为中心点, 并且制定显示的跨度
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
[self.mapView setRegion:region animated:YES];
*/
}
转载于:https://www.cnblogs.com/guangleijia/p/4828544.html
定位 - MapKit-自定义大头针相关推荐
- iOS地图定位导航与大头针的简单使用
定位 1.一次定位 1.创建位置管理器 // 这里创建的管理其对象如果没有强引用,就会造成你后面的操作不会出现效果,全局变量强引用.CLLocationManager *manager = [[CLL ...
- android 百度地图大头针,百度地图的集成 ---自定义大头针和弹窗
前言:在上一篇中介绍了百度地图sdk的加入,以及定位功能的实现,在本篇将要介绍如何在地图上绘制线,效果如图所示 // // CustomPaopaotView.h // DaDa // // Crea ...
- ios点击大头针气泡不弹出_百度地图使用(二)自定义大头针和弹出气泡
百度地图使用(二)自定义大头针和弹出气泡 (2014-08-19 10:37:09) 标签: 时尚 分类: IOS http://www.aichengxu.com/article/系统优化/1149 ...
- Vue中集成高德地图API实现定位与自定义样式信息窗体
场景 若依前后端分离版手把手教你本地搭建环境并运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 在上面 ...
- MKMapView自定义大头针
如何自定义大头针 --设置 MKMapView 的代理 实现下面的代理方法,返回大头针控件 - ( MKAnnotationView *)mapView:( MKMapView *)mapView v ...
- ios点击大头针气泡不弹出_iOS高德地图之自定义大头针and泡泡view
啥都不说先看效果图demo IMG_0270.PNG 先来说说如何自定义大头针以及点击大头针时弹出的泡泡view 一 : 自定义大头针 新建CustomAnnotationView 继承自MAAnno ...
- android百度地图单点定位_Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡...
一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...
- GIS定位和自定义图标
开发工具与关键技术:VS软件,GIS定位和自定义图标 作者:陈隆 撰写时间:2020年05月02日 说到GIS可能很多人都很陌生吧,其实只有没接触过的就肯定是不知道这到底是什么来的,可能知道GPS的比 ...
- 自制导航App(包含地图、定位、自定义marker、路线制定、模拟导航等功能)
高德地图路线导航制作 转载请注明出处:https://blog.csdn.net/Dreamer_man/article/details/104193832 由于公司项目需求,特地去官网,重新温习了一 ...
最新文章
- cocos2d 0.99.5版本屏幕默认是横屏,怎么修改为竖屏呢?
- Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】
- 关于SQLServer2000中触发器的使用——多行数据提交
- Redis分布式锁的正确实现方式(Java版)
- GraphPad Prism:如何在轴上放置一个或多个缺口?
- 复现经典:《统计学习方法》第 4 章 朴素贝叶斯
- 834 树中距离之和
- 微软公司等数据结构+算法面试100题2010版全部出炉
- 前端radio单选框默认选中_「radio选中」单选框radio总结(获取值、设置默认选中值、样式) - seo实验室...
- 真实临在--摘自{《信仰在我家》}
- 字符设备驱动笔记(二)
- 普通html优化处理,iOS 数据优化之处理HTML字符串
- 西岛住宿软件测试,三亚西岛怎么玩,吃住玩全攻略带走
- java pdf合并_如何实用Java实现合并、拆分PDF文档
- Win10系统重置后键盘鼠标都失灵,光标都不显示怎么解决?
- 【历史上的今天】11 月 16 日:RISC-V 掌门人出生;微软发布 Windows CE;电子管问世
- vue iview表单验证,清除表单验证/去掉表单验证的*号
- JavaSE:网络编程
- 【HTML | CSS】春节将至,为网页挂上精美的灯笼吧(附源码)程序员的浪漫
- Android开发 环境搭建(win 10)
热门文章
- ubuntu 终端内查找/搜索
- Mybatis学习总结二
- Jackson 注解 -- 使用构造器
- IDEA启动项目:找不到或无法加载主类
- java feign同时传对象和其他参数_关于Spirng Cloud的Feign传参问题:
- Java super关键字
- Android 屏幕录制GIF脚本
- 【译】 Sparky: A Lightning Network in Two Pages of Solidity
- (原创)Android6.0亮屏流程之Keyguard Window绘制
- 在ue4制作中容易出现哪些问题_青年鸡在育成期容易出现的问题有哪些呢