iOS开发:地址簿、地图与定位服务的深入探索
立即解锁
发布时间: 2025-08-17 02:01:22 阅读量: 3 订阅数: 11 

# iOS开发:地址簿、地图与定位服务的深入探索
## 1. 进一步探索相关框架
### 1.1 地址簿框架
地址簿和地址簿用户界面(UI)框架功能丰富。地址簿UI框架包含三个额外的模态视图控制器,而底层的地址簿框架可用于创建新联系人、设置属性以及编辑和删除联系人,其功能与“联系人”应用程序类似。若需详细了解这些API的使用,可参考相关指南。
### 1.2 地图套件与核心定位框架
地图套件(Map Kit)和核心定位(Core Location)框架可用于创建复杂的地图注释视图(MKAnnotationView),远不止简单的图钉注释。在处理地址或位置的应用程序中,可广泛应用这些功能。同时,还需复习地图套件的苹果指南,并完成核心定位的练习。
### 1.3 社交框架
若应用程序有社交网络功能需求,实现Twitter和Facebook支持既快速又简单。不过,这里展示的只是社交框架功能的冰山一角,更多示例可参考苹果的社交框架参考文档。
### 1.4 日历与提醒框架
掌握上述集成主题后,可了解日历和提醒编程指南,该指南介绍了事件套件(Event Kit)和事件套件UI框架。它们与地址簿框架在设计和功能上类似,可用于访问iOS日历和提醒信息,还能在应用程序中直接创建新事件和提醒。
## 2. 总结与问答
### 2.1 总结
在相关学习中,我们学会了让用户与地址簿中的联系人交互、发送电子邮件和推文,以及使用地图套件和核心定位框架。尽管处理地址簿数据存在一些挑战,如旧的C风格函数,但建立模式后会变得容易。地图套件和核心定位功能也是如此,多进行坐标和映射函数的实验,将更易将其集成到自己的应用程序中。而电子邮件功能实现起来较为简单。
### 2.2 问答
|问题|答案|
|----|----|
|设备离线时能否使用MKMapView?|不能,地图视图需要互联网连接来获取数据。|
|能否区分地址簿数据中地址(邮寄或电子邮件)的类型?|可以。虽然代码中未使用这些功能,但读取地址簿数据时可识别特定类型(如家庭、工作等)的地址,详细信息可参考地址簿编程指南。|
## 3. 工作坊
### 3.1 测验
1. 屏幕上的地图是哪个类的实例?
- a. UIMapView
- b. MKMapView
- c. MapView
- d. CLMapView
2. 负责提供社交网络交互的框架简称是什么?
- a. Core Data
- b. Social
- c. SNetworking
- d. Twitbook
3. ABPeoplePickerNavigationControllerDelegate协议至少需要实现多少个方法?
- a. 1
- b. 2
- c. 3
- d. 4
4. 人员选择器、邮件界面和Twitter编写器视图都使用哪个方法显示?
- a. displayViewController:animated:completion
- b. presentViewController:completion
- c. displayViewController:completion
- d. presentViewController:animated:completion
5. 正向地理编码的输入是什么?
- a. 纬度和经度
- b. 地址
- c. 地址簿
- d. 人
6. 访问地址簿值需要哪个函数?
- a. ABRecordGetValue
- b. ABRecordMoveValue
- c. ABRecordDuplicateValue
- d. ABRecordCopyValue
7. 要检查地址簿属性包含多少个多值属性(如电子邮件地址、电话号码等),可以使用哪个函数?
- a. ABMultiCount
- b. ABMultiValueGetCount
- c. ABMultiValueCopyCount
- d. ABMultiGetCount
8. 要放大地图的一部分,应使用以下哪个方法?
- a. setRegion:animated
- b. setRegion
- c. getRegion:animated
- d. zoomRegion:animated
9. 地理编码在iOS Playground中只有在将Playground设置为什么时才会生效?
- a. 在iOS模拟器中运行
- b. 显示不可见字符
- c. 在iOS模拟器外运行
- d. 在前台运行
10. 地图上的位置被称为什么?
- a. 图钉
- b. 位置标记
- c. 地标
- d. 标记
### 3.2 答案
1. B. 地图通过MKMapView对象显示。
2. B. 社交框架提供iOS中的所有社交网络功能。
3. A. ABPeoplePickerNavigationControllerDelegate协议只需实现一个方法即可正常工作。
4. D. 相关练习中的视图大量使用了presentViewController:animated:completion方法。
5. B. 正向地理编码只需输入地址。
6. D. 使用ABRecordCopyValue方法从地址簿条目中复制值。
7. B. 可以使用ABMultiValueGetCount方法检查地址簿属性包含的多值属性数量。
8. A. 要放大MKMapView的一部分,应使用setRegion:animated方法。
9. A. 除非将iOS Playground设置为在iOS模拟器中运行,否则地理编码会出错。
10. C. 在iOS中,地图上的位置被称为地标。
### 3.3 活动
1. 应用之前所学,使“BestFriend”应用程序保存所选朋友的姓名和照片,避免用户每次运行应用时重复选择。
2. 增强“BestFriend”应用程序,在电子邮件撰写窗口中默认包含当前位置(城市和街道)。
3. 更新项目的iPad版本,使人员选择器以弹出框形式显示,而非占据整个屏幕。
## 4. 实现定位服务
### 4.1 学习目标
- 了解可用的iOS定位感应硬件。
- 学习如何读取和显示位置信息。
- 掌握使用指南针检测方向。
### 4.2 核心定位框架概述
核心定位是iOS SDK中的一个框架,可提供设备的位置信息。根据设备及其当前状态,可使用GPS、蜂窝网络或WiFi三种技术。若设备有GPS硬件,核心定位会优先使用GPS,因其精度最高;若没有GPS硬件或GPS获取位置失败,则会依次 fallback 到蜂窝网络和WiFi。
### 4.3 获取位置
#### 4.3.1 导入框架与初始化
要使用核心定位,需先将其框架导入项目,可使用以下语句:
```swift
import CoreLocation
```
然后初始化一个CLLocationManager类的实例,指定接收位置更新的委托,请求用户使用其位置的权限,并开始更新位置,示例代码如下:
```swift
let locMan: CLLocationManager = CLLocationManager()
locMan.delegate = self
locMan.requestWhenInUseAuthorization()
locMan.startUpdatingLocation
```
0
0
复制全文
相关推荐










