#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-自定义大头针相关推荐

  1. iOS地图定位导航与大头针的简单使用

    定位 1.一次定位 1.创建位置管理器 // 这里创建的管理其对象如果没有强引用,就会造成你后面的操作不会出现效果,全局变量强引用.CLLocationManager *manager = [[CLL ...

  2. android 百度地图大头针,百度地图的集成 ---自定义大头针和弹窗

    前言:在上一篇中介绍了百度地图sdk的加入,以及定位功能的实现,在本篇将要介绍如何在地图上绘制线,效果如图所示 // // CustomPaopaotView.h // DaDa // // Crea ...

  3. ios点击大头针气泡不弹出_百度地图使用(二)自定义大头针和弹出气泡

    百度地图使用(二)自定义大头针和弹出气泡 (2014-08-19 10:37:09) 标签: 时尚 分类: IOS http://www.aichengxu.com/article/系统优化/1149 ...

  4. Vue中集成高德地图API实现定位与自定义样式信息窗体

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 在上面 ...

  5. MKMapView自定义大头针

    如何自定义大头针 --设置 MKMapView 的代理 实现下面的代理方法,返回大头针控件 - ( MKAnnotationView *)mapView:( MKMapView *)mapView v ...

  6. ios点击大头针气泡不弹出_iOS高德地图之自定义大头针and泡泡view

    啥都不说先看效果图demo IMG_0270.PNG 先来说说如何自定义大头针以及点击大头针时弹出的泡泡view 一 : 自定义大头针 新建CustomAnnotationView 继承自MAAnno ...

  7. android百度地图单点定位_Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡...

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...

  8. GIS定位和自定义图标

    开发工具与关键技术:VS软件,GIS定位和自定义图标 作者:陈隆 撰写时间:2020年05月02日 说到GIS可能很多人都很陌生吧,其实只有没接触过的就肯定是不知道这到底是什么来的,可能知道GPS的比 ...

  9. 自制导航App(包含地图、定位、自定义marker、路线制定、模拟导航等功能)

    高德地图路线导航制作 转载请注明出处:https://blog.csdn.net/Dreamer_man/article/details/104193832 由于公司项目需求,特地去官网,重新温习了一 ...

最新文章

  1. cocos2d 0.99.5版本屏幕默认是横屏,怎么修改为竖屏呢?
  2. Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】
  3. 关于SQLServer2000中触发器的使用——多行数据提交
  4. Redis分布式锁的正确实现方式(Java版)
  5. GraphPad Prism:如何在轴上放置一个或多个缺口?
  6. 复现经典:《统计学习方法》第 4 章 朴素贝叶斯
  7. 834 树中距离之和
  8. 微软公司等数据结构+算法面试100题2010版全部出炉
  9. 前端radio单选框默认选中_「radio选中」单选框radio总结(获取值、设置默认选中值、样式) - seo实验室...
  10. 真实临在--摘自{《信仰在我家》}
  11. 字符设备驱动笔记(二)
  12. 普通html优化处理,iOS 数据优化之处理HTML字符串
  13. 西岛住宿软件测试,三亚西岛怎么玩,吃住玩全攻略带走
  14. java pdf合并_如何实用Java实现合并、拆分PDF文档
  15. Win10系统重置后键盘鼠标都失灵,光标都不显示怎么解决?
  16. 【历史上的今天】11 月 16 日:RISC-V 掌门人出生;微软发布 Windows CE;电子管问世
  17. vue iview表单验证,清除表单验证/去掉表单验证的*号
  18. JavaSE:网络编程
  19. 【HTML | CSS】春节将至,为网页挂上精美的灯笼吧(附源码)程序员的浪漫
  20. Android开发 环境搭建(win 10)

热门文章

  1. ubuntu 终端内查找/搜索
  2. Mybatis学习总结二
  3. Jackson 注解 -- 使用构造器
  4. IDEA启动项目:找不到或无法加载主类
  5. java feign同时传对象和其他参数_关于Spirng Cloud的Feign传参问题:
  6. Java super关键字
  7. Android 屏幕录制GIF脚本
  8. 【译】 Sparky: A Lightning Network in Two Pages of Solidity
  9. (原创)Android6.0亮屏流程之Keyguard Window绘制
  10. 在ue4制作中容易出现哪些问题_青年鸡在育成期容易出现的问题有哪些呢