地图和岗位

By admin in 亚洲必赢app在哪下载 on 2018年12月28日

在这一章节中,你将会学到在您的app中咋样行使酷派中的GPS。你将会学会怎么获取用户的地方,同时在地形图上标明出地点。本章内容包含了
地图套件(Map
基特(Kit))和苹果公司提供的地形图、方向框架。通过学习本章节的始末,你及时就能够搞定基于地方一定的应用。

提供用户的职位音信是支付iOS应用最兴奋的特征,在地形图上显得用户的位需要多少个步骤。

首先步用Core Location来采访用户的位置。Core
Location是一雨后春笋类的集合,通过设备的GPS和蜂窝获取地点信息,仍能凭借WIFI获取用户音信。Core
Location
是由苹果企业提供的众多frameworks中的一个。Frameworks是一组类的汇聚,为现实的某部任务而设计的一套工具。我们现在用Core
Location举一个事例,Core
Location是为了处理用户地点新闻而规划的一个framework。Core
Data是为了处理数据而设计的一个framework。这一个framework是可选的,由此需要先把这几个框架导入到工程当中后,才能运用这个框架。

第二步是在地图中标注出用户的职务。苹果公司提供了Map
基特(Kit)框架,帮助大家绘制和保管地图。在Xcode
6中导入框架卓殊容易。首先Project
Navigator中点击项目名称,点击名为Capabilities的tab选项按钮,向下滚动找到Maps。将地图的开关键处于On的场所,这时Map基特(Kit)框架已经添加到工程中了。现在固然可以在工程中找到Map基特(Kit),不过导入流程还尚无形成。MapKit还索要导入controller
file中。我们下列一行代码完成导入工作:

import MapKit

如此,Map基特(Kit)类和商谈就导入到controller文件中了。Map基特(Kit)中的类和商谈都是以MK起始的。

Page 213

Core Location

正如往日所说的,Core Location是一多样查找用户地点的类的会聚。Core
Location中有两个检测用户地方的法门。第一个点子是Significant-Change
Location。这一个措施可以节约电池电量,它只在用户的岗位显明改观时才会更新地方。第二个措施是Location
Service(Service)s,可以自主确定一定更新的平整。最终一种方法是Regional
Monitoring方法,使用附近的地理区域边界或者Bluetooth
beacons来恒定。本书紧要介绍第两种艺术:Location
瑟维斯s,它是最常用到的法子。

更多新闻请参见苹果集团的Location and Maps Programming
Guide

拿到用户地方需要利用Core Location框架,当你把Maps
capabilities开关切换成On(开)状态时,Xcode并没有自动导入Core
Location框架,需要大家手动导入,请看以下三个步骤:

  1. 点击Project Navigator上的藏蓝色工程图标;
  2. Editor展现工程的详细信息,滑倒最下方;
  3. 在Link Binary with Libraries下方点击Add;
  4. 选料Core Location,然后点击Add。

Core Location框架就会添加到Project
Navigator中,大家还亟需在controller中写一行代码才能收获此框架:

import CoreLocation

亚洲必赢app在哪下载,手机用户的职务万分耗费电量,它比此外的任务需要更多的电池电量和天线频率,所以确保您的App唯有在急需地方时才得到地点,一旦拿到到岗位,就把那么些效应关闭,如若先天还需要地理地方,可以使用期限更新效能

在获取用户位置从前,很紧要的一件事是先反省一定服务是否可用。定位服务不能运用或者是出于以下三种状态:

  • 用户在安装中关闭了Location 瑟维斯(Service)(Service)s(定位服务)。
  • 用户禁止你的App使用Location 瑟维斯(Service)(Service)s(定位服务)。
  • 配备处于飞行格局或者连续不了网络。

Page 214 | Chapter 8 : Maps and Location

Core
Location提供了名为locationServicesEnabled的点子来检查装置的稳定服务是否可用,locationServicesEnabled办法通过布尔类型重返值来规定定位服务是否可用,true可用,false不可用。

Requesting User Location

因而CLLocationManager类来请求用户地方。首字母CL代表Core Location。The
location
manager用于采集参数和开启定位服务。创设CLLocationManager对象和创办其他的靶子类似。举例表达:

var locationManager: CLLocationManager = CLLocationManager()

CLLocationManager有一些性质是必须要设置的。

desiredAccuracy属性是枚举类型,枚举,就是用一个着重词代表一个数字。枚举有点像是多选题,你不可能不从采取中挑选出一个值来。desiredAccuracy属性有上面一些值:

kCLLocationAccuracyBest
最精准的一定,也是最消耗电量的抉择
kCLLocationAccuracyNearestTenMeters
精准度在十米范围内
kCLLocationAccuracyHundredMeters
准确度在一百米范围内
kCLLocationAccuracyKilometer
精确度在一公里限量内
kCLLocationAccuracyThreeKilometers
精确度在三海里范围内

精准度越高,电量消耗越大。我们要选择可以满足最低要求的精准度级别。假诺是像谷歌地图之类的App来追踪用户的职务,那么kCLLocationAccuracyNearestTenMeters或者kCLLocationAccuracyHundredMeters就足以满足咱们的需求。假设App只需提供用户所在城市,像是Twitter中的定位,kCLLocationAccuracyKilometer或者kCLLocationAccuracyThreeKilometers就可以满足我们的需求。大多数情状下,一般不需要kCLLocationAccuracyBest

设置desiredAccuracy属性的艺术和装置任何对象的特性一样:

locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters

Core Location | Page 215

CLLocationManager也急需delegate属性。CLLocationManage
delegate坚守CLLocationManagerDelegate协议。无论什么日期出现了地点更新或者出现谬误,delegate都会收到到警示。为了接收这多少个警告,delegate必须通过CLLocationManagerDelegate协议与警报保持联系。controller必须讲明遵从协议,将CLLocationManagerDelegate添加到类的顶部:

class ViewController: UIViewController, CLLocationManagerDelegate

想要接收定位警高,要利用locationManager(_:,didUpdateLocations:)主意。每当定位信息变更的时,那多少个措施就会被调用:

func locationManger(manager: CLLocationManager!,didUpdateLocations locations: [AnyObject]!) {
    println("Location found")
}

想要在此外时候都能接收Core
Location的失实警告,需要使用locationManager(_: didFailWithError:)方法:

func locationManager(manager: CLLocationManager!, didFailWithError error:NSError!) {
    println("Error!")
}

倘使遵从协议并利用其中的章程后,就务须要设置delegate的习性:

locationManager.delegate = self

在激活定位服务此前,
用户必须同意app使用用户的地方信息。定位服务有二种特许项目。第一种是requestWhenInUseAuthorization;授权App仅限前台运行的时使用地方信息。
第两种是requestAlwaysAuthorization.
授权App在前台依然后台运行都得以收获用户的岗位消息,第二个授权都会给app提供追踪用户地方的力量。调用授权的艺术是:

locationManager.requestWhenInUseAuthorization()

locationManager.requestAlwaysAuthorization()

取得授权后,调用startUpdatingLocation()办法开启定位服务:

locationManager.startUpdatingLocation()

如此这般,locationManager会依照有关要求起头追踪并赶回用户地点新闻。

Page 216 | Chapter 8 : Maps and Location

locationManager (_:, didUpdateLocations:)方法会提供CLLocation数组,遵照出现前后顺序排列。数组中至少会有一个目的。数组中的每一个对象都是是一个CLLocation。CLLocation这几个类为现实的地点整理社团CLLocationManager的地点数据。CLLocation跟踪地理坐标,海拔,速度,方向,甚至席卷定位准确度。CLLocation拥有不少使得的性质:

coordinate
CLLocationCoordinate2D, 纬度坐标和经度坐标
altitude
海拔低度,单位:米
timestamp
取得到数码时的流年和日期
description
用字符串的格式重返CLLocation,可以用print()打印出来

请记住,一旦你取得了你需要的新闻,必须终止定位服务职能。为了停息这多少个劳务,在CLLocationManager中调用stopUpdatingLocation()
:

manager.stopUpdatingLocation()

举个例子,在locationManager( manager: ,didUpdateLocations:)方法中取得地点后,日常会终止定位服务。从前在CLLocationManager中创建的这一个变量极度适合处理当下的这种情形。

**明白了!** iOS 8模拟器在模仿Core
Location时会现身局部左右不平等的作为。如若一定服务没有调用,在Info.plist文件中添加多少个键:
NSLocationWhenInUsageDescription NSLocationAlwaysUsageDescription
NSLocationUsageDescription 每个键对应的值设置成Always或者When in Use
这多少个键值会补助打开定位服务

Core Location | Page 217

Map Kit

Map
基特(Kit)框架提供地图和动向,地图可以体现到马路级另外音信,3D建筑,卫星图像,或者将五头结合起来。地图自动响应缩短、放大、平移、倾斜等手势动作,还是能在地图上标注点同时加上声明。

MKMapView

Map
Kit提供MKMapView视图类来展现地图,MKMapView可以来得地图,管理用户的输入音讯,显示自定义注释。

MKMapView也有一个delegate属性。和CLLocationManager的delegate属性一样,MKMapView的delegate也能接收updates。MKMapView
delegate需要服从MKMapViewDelegate协议。设置delegate的主意是,从Storyboard的Editor中,将Map
View用Control拖动法拖动到Document Outline中的View
Controller文字上,然后弹出一个食谱,点击菜单中的delegate,这样就在有关界面上设置好了delegate。

MKMapView有无数惠及的属性和办法。举了例子,MKMapView不用添加另外代码就可以在地图上出示用户地理地点。大家把性能设置showsUserLocationtrue,就足以在地形图上体现用户音讯了:

myMapView.showsUserLocation = true

用户的职位将会在地图上用一个蓝点标注出来。

一般大家把用户所在地点设置为地图的为主点。假如想移动重新安装地图大旨点,需要设置centerCoordinate属性,centerCoordinate性能需要CLLocationCoordinate2DCLLocationCoordinate2D是经度和纬度的坐标,被打包成一个单身的变量。通过CLLocationCoordinate2DMake情势创造CLLocationCoordinate2D

var coordinates: CLLocationCoordinate2D = CLLocationCoordinate2DMake(100,100)

偶尔大家会在地形图上拓宽地点,当region特性设置好后,放大后图像会活动调整。region性能需要MKCoordinateRegion目的,但是,大部分情景下,比起创设新的靶子,编辑当前的region对象会更简短一些:

var updatedRegion: MKCoordinateRegion = myMapView.region
updatedRegion.span.longitudeDelta = updatedRegion.span.longitudeDelta * 2.0
updatedRegion.span.latitudeDelta = updatedRegion.span.latitudeDelta * 2.0 
myMapView.region = updatedRegion

Page 218 | Chapter 8 : Maps and Location

longitudeDeltalatitudeDelta都是span的一有些,span是面积有多大,以centerCoordinate为要旨可显示的幅度和可观。

Directions (方向)

Map 基特(Kit)还可以够在App中提供指出计划路线导航成效。MKDirections
API可以遵照苹果服务器的计量提供线路方向。有步行线路设计,驾驶线路计划,花费的时光,和另外可选的门路。地图上的各样点用MKMapItem表示,MKMapItem包含了地图上有关地点的富有音讯,这一个信息包括地图地点,坐标值,地方名称等数据。MKMapItem仍可以流传地图应用上,使用地图应用上更多高档效能。

始建MKMapItem最简单易行的办法是使用mapItemForCurrentLocation办法,这多少个艺术得到用户的岗位然后遵照岗位创立MKMapItem:

var mapItem: MKMapItem = MKMapItem.mapItemForCurrentLocation()

MKMapItem类有部分惠及的习性。name属性是一个字符串,提供地点的描述性名称。phoneNumber属性也是字符串,存储这些职务的电话号码。URL属性存储地方的网址。

MKMapItem创造后,就可以轻松的把岗位传递到地图应用上,使用导航功用。openMapWithItems: launchOptions主意可接受一个数组,数组中包括总括一至六个的MKMapItem。通过launchOptions,这一个items就会被映射到地图应用上。MKLaunchOptionsDirectionsModeKey让地图应用基于六个点来提供规划路线。

Plotting Points (绘制点、标注点)

苹果集团提供了一个在地图上绘制点的章程,叫annotations(声明)。annotations是足以定义一个地方或者一个点。它平时用于出色感兴趣的地点,提供更多细节。annotations也兼具一个可选标注气泡(optional
callout
bubble)。气泡代表有些地方的名字和地点这样的音讯。气泡也是可点击的,可以像button(按钮)这样接收用户的动作。

annotations由两部分构成,注脚对象(annotation
object)和注释视图(annotation view)。annotation
object是一个轻量级对象,管理annotation中的数据。annotation
object是从MKPointAnnotation类中开创的。annotation
view是从MKPinAnnotationView类中创制的。annotation
view用来在地形图上标明pin(大头针)。

Map Kit | Page 219

六个步将annotation添加到MKMapView中。第一步是为感兴趣的地址创立一个MKPointAnnotation:

var point = MKPointAnnotation()
point.coordinate = CLLocationCoordinate2DMake(37.7756, -122.4193)
point.title = "San Francisco"

接下来,遵循MKMapView协议,回应mapView(_: viewForAnnotation:)措施,此措施可以回收利用annotation
view,就像是table view中也有措施可以另行利用cell:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!)-> MKAnnotationView! {
    var pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier:"pinIdentifier")
    return pin
}

最后,调用addAnnotation办法,这样,就把annotation添加到地图中了:

mapView.addAnnotation(point)

前几日,大家来搞定你首先个应用了地图App吧。

Exercise: Adding Maps to the Passport App

勤学苦练请见此链接

Page 220| Chapter 8 : Maps and Location

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 亚洲必赢app官方下载 版权所有