热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MapKit&CoreLocation基本使用以及地图大头针的添加与个性化

MRMapViewController.mCoreLocation&MapKitCreatedbyMr.Roboton201786.
//
// MRMapViewController.m
// CoreLocation&MapKit
//
// Created by Mr.Robot on 2017/8/6.
// Copyright © 2017年 Mr.Robot. All rights reserved.
//

#import "MRMapViewController.h"
#import "MyAnnotationModel.h"

#import
#import

@interface MRMapViewController () <MKMapViewDelegate>

@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (nonatomic, strong) CLLocationManager *mgr;

@end

@implementation MRMapViewController

- (void)viewDidLoad {
[super viewDidLoad];

self.mgr = [CLLocationManager new];

if ([self.mgr respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[self.mgr requestAlwaysAuthorization];
}



/**
userTrackingMode几种选择,以及意义:
MKUserTrackingModeNOne= 0, // the user's location is not followed(不跟随用户地点)
MKUserTrackingModeFollow, // the map follows the user's location(跟随用户位置)
MKUserTrackingModeFollowWithHeading __TVOS_PROHIBITED, // the map follows the user's location and heading(跟随用户位置并用箭头指向用户朝向)
*/

self.mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
//设置代理
self.mapView.delegate = self;

/**
ios9新特性
*/

//显示交通状况
self.mapView.showsTraffic = YES;

//设置指南针(默认就是yes)
self.mapView.showsCompass = YES;

//设置比例尺
self.mapView.showsScale = YES;
}

#pragma mark - 用户点击地图即添加大头针
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point = [[touches anyObject] locationInView:self.mapView];

CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];

MyAnnotationModel *annotatiOnModel= [MyAnnotationModel new];

annotationModel.coordinate = coordinate;
annotationModel.title = @"";
annotationModel.subTitle = @"";

[self.mapView addAnnotation:annotationModel];
}

//自定义大头针模型
#pragma mark - 只要添加了大头针模型就会调用这个方法,返回对应的View
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
{

//如果返回nil, 就代表用户没有自定义的需求, 所有的View样式由系统处理
//MKUserLocation: 系统专门显示用户位置的大头针模型
//MyAnnotationModel: 自定义的类

//1. 如果发现是显示用户位置的大头针模型, 就返回nil
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}


//2. 自定义大头针View --> 跟Cell的创建几乎一样
static NSString *ID = @"annoView";

//MKAnnotationView : 默认image属性没有赋值
//MKPinAnnotationView : 子类是默认有View的
MKPinAnnotationView *annoView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];

if (annoView == nil) {
annoView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];

/**
MKPinAnnotationColorRed
MKPinAnnotationColorGreen,
MKPinAnnotationColorPurple
*/


// 设置颜色 iOS9首次过期
//annoView.pinColor = MKPinAnnotationColorGreen;

//3. 设置颜色, iOS9新增
annoView.pinTintColor = [UIColor colorWithRed:arc4random_uniform(256) / 255.0 green:arc4random_uniform(256) / 255.0 blue:arc4random_uniform(256) / 255.0 alpha:1];

//4. 设置动画掉落
annoView.animatesDrop = YES;

}

return annoView;

}

#pragma mark - 切换地图类型
- (IBAction)mapTypeChangeClick:(UISegmentedControl *)sender {

/**
MKMapType类型
typedef NS_ENUM(NSUInteger, MKMapType) {
MKMapTypeStandard = 0, 标准
MKMapTypeSatellite, 卫星
MKMapTypeHybrid, 混合模式
MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), 卫星模式flyover(flyover模式中国地区不能用)
MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), 混合模式flyover
} NS_ENUM_AVAILABLE(10_9, 3_0) __TVOS_AVAILABLE(9_2) __WATCHOS_PROHIBITED;
*/


switch (sender.selectedSegmentIndex) {
case 0:
self.mapView.mapType = MKMapTypeStandard;
break;
case 1:
self.mapView.mapType = MKMapTypeSatellite;
break;
case 2:
self.mapView.mapType = MKMapTypeHybrid;
break;
default:
break;
}

}

#pragma mark - 定位按钮
- (IBAction)locateClick:(id)sender {

//获取当前用户位置-以二维坐标表示
CLLocationCoordinate2D coordinate = self.mapView.userLocation.location.coordinate;

//获取当前显示范围
MKCoordinateSpan coordinateSpan = MKCoordinateSpanMake(self.mapView.region.span.latitudeDelta, self.mapView.region.span.longitudeDelta);
//设置显示范围及中心点地理坐标
[self.mapView setRegion:MKCoordinateRegionMake(coordinate, coordinateSpan) animated:YES];
}

#pragma mark - 调整地图大小
#pragma mark - 放大
- (IBAction)zoomInClick:(id)sender {
CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 0.5;
CGFloat lOngitudeDelta= self.mapView.region.span.longitudeDelta * 0.5;

[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, MKCoordinateSpanMake(latitudeDelta, longitudeDelta)) animated:YES];
}

#pragma mark - 缩小
- (IBAction)zoomOutClick:(id)sender {
CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 2;
CGFloat lOngitudeDelta= self.mapView.region.span.longitudeDelta * 2;

[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, MKCoordinateSpanMake(latitudeDelta, longitudeDelta)) animated:YES];
}

- (BOOL)prefersStatusBarHidden
{
return NO;
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

推荐阅读
  • MapKit 使用介绍:大头针和图形渲染
    作者:PRANJALSATIJA,原文链接,原文日期:2016-11-13译者:TonyHan; ... [详细]
  • IOS笔记汇总为了方便开发者开发出强大的功能,苹果提供了各种各样的框架IOS属性IOS基础属性导入依赖propertyNSStringNSDictionaryNSAr ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 添加#import头文件倒入mapkit.framework库mapkit.framework是属于ui,可以在故事版上添加mkmap ... [详细]
  • 高德IOS真机调试LMAMapKit出错问题的解决方法(directory not found for option)
    1最近项目到了收尾阶段,所以开始了在真机部署调试,之前的模拟器环境下测试项目,一切都没问题,今天真机调试过程中, ... [详细]
  • IOS开发之百度地图API环境搭建 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 开发笔记:实现1353表达式中的括号匹配(栈的应用) ... [详细]
  • 本文详细介绍了在CodeUp平台中实现大数进制转换的技术方法。具体而言,该问题要求将一个最多包含30位数字的十进制非负整数转换为二进制表示。输入数据包含多行,每行包含一个不超过30位的十进制非负整数。通过高效的算法设计,确保了大数转换的准确性和性能。 ... [详细]
  • SRM 553:深入解析供应链管理系统的最新进展与应用本文详细探讨了供应链管理系统(SCM)的最新发展及其在实际应用中的影响。通过对当前技术趋势的分析,文章揭示了 SCM 在提高效率、降低成本和增强透明度方面的关键作用。此外,还介绍了几种创新的 SCM 解决方案,如区块链技术和人工智能的应用,以及这些技术如何帮助企业更好地应对市场变化和挑战。 ... [详细]
  • iOS开发之CoreLocation(GPS定位)
    1、概述在iOS开发中,要想加入地图和定位功能这2大功能,必须基于2个框架进行开发(1)MapKit:用于地图 ... [详细]
  • iOS 系统架构 && 常用 framework
    整理自互联网,感谢原文作者!1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多2.iOS的系统架构分为四层,由上到下一次为:可触摸层(CocoaTo ... [详细]
  • 在iOS6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化。开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法。因此本节介绍的内容也同样适用于iOS5 ... [详细]
  • IOS9之当前位置定位
    2019独角兽企业重金招聘Python工程师标准#import*.h文件中导入以下两个框架*#import ... [详细]
  • Javaprintf()和println()的区别是什么?1.在学习Java7concurrencycookbook的第一章节时,发现《Interrup ... [详细]
author-avatar
骑猪猪-逛恋空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有