若果今日从未有过了手机……

这难得的远非手机的一天,孩子们做完作业,可以看会儿电视机,而不是直奔IPAD去各样游乐里奔忙。小小的人儿朋友圈里也是巨大,作业群、精英班、小组群,一个接一个的微信呼唤,让娃儿们疲于奔波。这个时期的娃们都比得了哪吒,五头六臂,十八般武艺,样样了然,端得是一个“牛”字了得。可他们,就是缺少一个空中,一个方可没有那么多承担,没有那么多作业,没有那么多任务的擅自空间。

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

您好像忽然有了整块时间,老师在老人群发的各样音信也无能为力吸收,那么些令人郁闷到窒息的接龙终于得以远离视线;你突然没了丰田点评可以查中午吃美食的地方,踏踏实实坐公交回家,因为尚未手机,所以不可能滴滴打车,无法夜店,不可以呼朋唤友……回家陪老人家孩子踏实吃顿家里的饭,没有各类手机短信的骚扰,这感觉久违了……

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为中央可兆示的增幅和中度。

挤进地铁里,我傻傻地一站,人们都分别看自己的无绳电话机,唯有自己不知看什么地方。

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吧。

长久的地铁线路承载着奔向不同倾向的各类人群。人们无一例外举初阶机在看,固执地不看手机又不可以拿书来看的自身瞬间来得好尴尬。眼睛不知看向何方,既不可以盯着人家看,也无法处处乱张望。我只可以假装闭目养神,最难堪是一不小心睡着了,晃来晃去地贴到别人身上,好像占人家便宜似的,令人非凡难受。

如此,Map基特(Kit)类和研商就导入到controller文件中了。Map基特(Kit)中的类和探究都是以MK初阶的。

餐厅里从未了拿手机消毒的人群,人们踏踏实实聊天、吃饭,这样没有手机的扰乱,胃是很心情舒畅的。一顿饭吸收的很绝望,人们聊着聊着,心绪也会增强不少。每个人不再沉浸在自己手机的社会风气里,不再刷朋友圈,不再晒这一餐那一饭,生活或者简单轻松许多。

提供用户的岗位音讯是支付iOS应用最冲动的风味,在地形图上出示用户的位需要两个步骤。

如若今日从未有过了手机,你会做哪些吧?

Core Location

正如从前所说的,Core Location是一名目繁多查找用户地点的类的聚集。Core
Location中有六个检测用户地点的章程。第一个措施是Significant-Change
Location。这一个办法能够节约电池电量,它只在用户的职务显明改观时才会更新地方。第二个情势是Location
瑟维斯(Service)s,可以自主确定稳定更新的平整。最后一种艺术是Regional
Monitoring方法,使用附近的地理区域边界或者Bluetooth
beacons来定位。本书重要介绍第二种方法:Location
Services,它是最常用到的点子。

更多音讯请参考苹果集团的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只有在急需地方时才拿走地方,一旦得到到岗位,就把这些功效关闭,假若前些天还亟需地理地点,可以行使时限更新效能

在赢得用户地点以前,很重点的一件事是先检查一定服务是否可用。定位服务无法采纳可能是出于以下三种意况:

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

Page 214 | Chapter 8 : Maps and Location

Core
Location提供了名为locationServicesEnabled的办法来检查设备的固化服务是否可用,locationServicesEnabled方法通过布尔类型重回值来确定定位服务是否可用,true可用,false不可用。

于是乎,很三个人起首不习惯,当这样干燥的一天如水一般滑过,他们开首怀恋起手机来。有手机,就有世界,手指轻轻一滑,就看收获各样八卦,领会到各个消息,订拿到各个美食,百度得了各类问题,解决得了各个疑难杂症,撩得了各种妹子帅哥……

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让地图应用基于多个点来提供规划路线。

于是那一个世界又起来热热闹闹起来。因为手机只是子虚乌有地消失了一天,没有了手机,人们便不会生活。

Requesting User Location

通过CLLocationManager类来请求用户地点。首字母CL代表Core Location。The
location
manager用于收集参数和开启定位服务。创造CLLocationManager对象和创办其他的目标类似。举例表达:

var locationManager: CLLocationManager = CLLocationManager()

CLLocationManager有一对特性是必须要设置的。

desiredAccuracy属性是枚举类型,枚举,就是用一个关键词代表一个数字。枚举有点像是多选题,你不可能不从接纳中挑选出一个值来。desiredAccuracy属性有下边一些值:

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

精准度越高,电量消耗越大。我们要采用可以知足最低要求的精准度级别。假使是像Google地图之类的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

自家特意希望以此世界有那么一天尚未手机。

Exercise: Adding Maps to the Passport App

锻炼请见此链接

Page 220| Chapter 8 : Maps and Location

这多少个创意让自己乐不可支了一阵儿。可是,一旦遇上人头攒动的山头时刻,人和人几乎贴在一块,想要从背包里拿出书,翻来翻去,就会赶上身边的人,通常会招人白眼。这还真是另类得稍微不具体。

在这一章节中,你将会学到在你的app中怎样运用中兴中的GPS。你将会学会如何收获用户的职位,同时在地图上标注出地点。本章内容涵盖了
地图套件(Map
基特(Kit))和苹果集团提供的地图、方向框架。通过学习本章节的内容,你立即就足以搞定基于地方固定的使用。

坐地铁所有的人都共同假寐?望哪里的都有,借使正好总盯着一个东北人看,必然会是这般的结果:“你瞅啥?”
“瞅你咋滴?”
噗刺!(当然这是个笑话,是指东北人脾气凶猛,遇上对面的人看她,不分青红皂白,就会怒火中烧,直接拿刀刺过去,哈哈!这多少个太夸张了!)

Map Kit

Map
基特框架提供地图和自由化,地图可以显得到马路级其它音信,3D建筑,卫星图像,或者将两者结合起来。地图自动响应缩短、放大、平移、倾斜等手势动作,还可以在地图上标注点同时充足注解。

图片 1

Page 213

日子过去了一天。

import MapKit

图片 2

首先步用Core Location来采访用户的地方。Core
Location是一雨后春笋类的成团,通过设备的GPS和蜂窝获取地点新闻,还是可以凭借WIFI获取用户信息。Core
Location
是由苹果集团提供的成百上千frameworks中的一个。Frameworks是一组类的聚合,为现实的某部任务而规划的一套工具。我们现在用Core
Location举一个例证,Core
Location是为着处理用户地点音讯而计划的一个framework。Core
Data是为着处理多少而规划的一个framework。这么些framework是可选的,由此需要先把那个框架导入到工程当中后,才能动用这个框架。

图片 3

业主没法儿一会一个对讲机地催,微信里客户也不可以一条一条地Challenge,小组研讨会因为没有了手机无法随时查询网上的即时音信而搁浅……

前些天,我为着改变自己时刻不在看手机的坏习惯,为了让低下的头重新高昂起来,为了自身这脆弱的颈椎,特意带了一本书在包里。当旁人都看手机时,我却在看书。这创意万分特立独行,即便也需要低头,但时常需要查阅书页也得以让颈椎活动起来,至少不用总一个架子不变。比一向盯伊始机看好了成百上千。