IOS应用开发基础教程

上传人:re****.1 文档编号:570058218 上传时间:2024-08-01 格式:PPT 页数:27 大小:597.50KB
返回 下载 相关 举报
IOS应用开发基础教程_第1页
第1页 / 共27页
IOS应用开发基础教程_第2页
第2页 / 共27页
IOS应用开发基础教程_第3页
第3页 / 共27页
IOS应用开发基础教程_第4页
第4页 / 共27页
IOS应用开发基础教程_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《IOS应用开发基础教程》由会员分享,可在线阅读,更多相关《IOS应用开发基础教程(27页珍藏版)》请在金锄头文库上搜索。

1、IOS应用开发基础教程QQ学习群:262779381第十二章 GPS位置服务与地图编程QQ学习群:262779381教学目标:1.了解MKMapView框架的基本知识。2.掌握MKMapView定位的基本使用方法,3.掌握IOS地图编程中的大头针放置方法。QQ学习群:26277938112.1GPS位置服务编程 在学习如何使用MapKit类之前,我们还要了解一下在IOS设备中一个重要的类CLLocation,它的作用就是定位设备的当前位置,这个功能也会用于我们在使用MapKit类中。CLLocation类位于CoreLocation.framework框架中,所以如果我们要使用CLLocati

2、on类,我们还需要将CoreLocation.framework导入到项目中,这里我们还是在将导入方法讲述一遍,助于读者掌握。 在左侧项目栏中,点击项目名称,然后XCode的中间区域会出现一排选项卡,然后选择Build Phases选项卡,接下来选择Link Binary With Libraries标签,在这个标签里就能添加我们所需要的框架了,如图所示。QQ学习群:262779381QQ学习群:262779381QQ学习群:262779381 接下来,我们就通过一个简单例子来学习如何通过定位系统获取到当前设备所在的地理位置的坐标信息。 在XCode中新建一个Single View Appli

3、cation项目模板,然后使用上述导入框架的方法导入CoreLocation.framework框架,接着我们还要在AppDelegate.h头文件中导入CoreLocation框架的头文件,并且使用CLLocationManagerDelegate这个用于定位的协议。1.#import 2.#import 3.interface AppDelegate : UIResponder 4.QQ学习群:262779381 然后我们在AppDelete.m文件的初始化方法中使用CLLocationManager类来获取当前设备的地理位置信息。5.- (BOOL)application:(UIAppl

4、ication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions6.7. self.window = UIWindow alloc initWithFrame:UIScreen mainScreen bounds autorelease;8. self.window.backgroundColor = UIColor whiteColor;9. self.window makeKeyAndVisible;10. CLLocationManager *locationManager = CLLoca

5、tionManager allocinit;11. locationManager.delegate = self;12. locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters;13. locationManager startUpdatingLocation;14. return YES;15. 在代码中,我们首先创建了一个CLLocationManager的实例,然后对它进行初始化,并设置了实例的代理为本身,这样才可以使用相应的代理方法。setDesiredAccuracy方法是用来设置定位的精确度,它

6、包含了5种不同精确度的值。kCLLocationAccuracyBest : 精确度最高kCLLocationAccuracyNearestTenMeters : 精确度为10米kCLLocationAccuracyHundredMeters : 精确度为100米kCLLocationAccuracyKilometer : 精确度为1000米kCLLocationAccuracyThreeKilometers : 精确度为3000米如果在项目中对地理位置定位的精确度要求比较高,就将值设置为kCLLocationAccuracyBest,一般情况下是设置为10米。 然后通过CLLocationM

7、anager的实例调用startUpdatingLocation方法,开始更新当前的地理位置信息,这个方法是实时更新的,也就是说每秒更新一次,我们知道开启定位服务是非常耗电和耗流量的,所以一旦我们获取了当前的地理位置信息之后,我们还需要通过实例调用stopUpdatingLocation方法去停止更新地理位置信息。QQ学习群:262779381QQ学习群:262779381 下面我们要实现CLLocationManagerDelegate协议中的代理方法。获取地理位置信息坐标是通过CLLocationCoordinate2D类来实现,CLLocationCoordinate2D是一个结构体,结

8、构体中包含了两个值,latitude和longitude纬度和经度。通过这个两个值就能显示地理位置的坐标信息。1. - (void)locationManager:(CLLocationManager *)manager2. didUpdateToLocation:(CLLocation *)newLocation3. fromLocation:(CLLocation *)oldLocation4. 5. CLLocationCoordinate2D coordinate = newLocation.coordinate;6. NSLog(当前位置坐标为:%f , %f,coordinate.

9、longitude,coordinate.latitude);7. manager stopUpdatingLocation;8. 这个代理方法中的3个参数分别代表了CLLocationManager实例、新的位置信息和旧的位置信息。构建并运行,可以看到在控制台上输出了当前设备的地理位置坐标的信息。2013-11-18 19:47:39.174 CLLocation655:c07 Application windows are expected to have a root view controller at the end of application launch2013-11-18 1

10、9:47:40.263 CLLocation655:c07 当前位置坐标为:-122.030721 , 37.331464在读取完地理位置坐标信息之后,比如我们又到了另一个地方,或者说想要去另一个地方,我们还可以通过CLLocationDistance类来获取到两个地点之间的距离。24.- (void)locationManager:(CLLocationManager *)manager25.didUpdateToLocation:(CLLocation *)newLocation26. fromLocation:(CLLocation *)oldLocation27.28. 29. CLL

11、ocationDistance distance = newLocation distanceFromLocation:oldLocation;30. NSLog(两地之间的距离为:%f,distance);31. oldLocation是上一次定位的地理位置的坐标信息,读者也可以重新定义一个准确的地理位置。最后构建并运行程序,可以在控制台上看到两的地理位置距离的信息。因为我们的设备并没有移动,所以两个坐标信息是一致的。CLLocation655:c07 两地之间的距离为:-1.000000QQ学习群:262779381 和安卓相比,iOS的地图使用更为方便,我们只需要创建一个MKMapVie

12、w类的实例然后将它添加到视图当中即可。XCode中自带的MapKit框架是基于Google地图的框架,它调用了一些Google地图的基本功能。 MKMapView类是属于MapKit.framework框架中,所以我们在使用地图之前还是要将MapKit框架导入到项目中,并在头文件中添加框架的头文件。在XCode中新建一个Single View Application项目模板,首先我们把MapKit框架和CoreLocation框架都加入到项目中,接着我们将头文件和相应的协议添加到项目中。MapKit类库中也提供了很多代理方法,都遵循MKMapViewDelegate协议。还要添加定位的CLLo

13、cationManagerDelegate协议。首先在ViewController.h中引入相关头文件以及协议方法。QQ学习群:26277938112.2MKMapView编程QQ学习群:2627793811.#import 2.#import 3.#import 4.interface ViewController : UIViewController5.end 接下来我们将UIViewController的实例添加到窗口上,并将它设置为窗口的根视图控制器。-AppDelegate.m-6.#import AppDelegate.h7.#import ViewController.h8.-

14、(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 9. / Override point for customization after application launch.10. ViewController *vc = ViewController allocinit;11. self.window.rootViewController = vc; 12. vc.view.backgroundColor = UIColor w

15、hiteColor;13. vc release;14. return YES;15.QQ学习群:262779381 一切准备工作就绪后就可以开始添加我们的地图信息了。我们在ViewController.h文件中创建一个MKMapView的实例。-ViewController.h-16.interface ViewController : UIViewController17.18. MKMapView *mapView;19.20.endQQ学习群:262779381 接下来我们在实现文件中对MKMapView的实例进行初始化的操作,并设置相关的属性。-ViewController.m-21

16、.- (void)viewDidLoad22.23. super viewDidLoad;24. mapView = MKMapView allocinitWithFrame:CGRectMake(0, 0, 320, 480);25. mapView.showsUserLocation = YES;26. mapView.delegate = self;27. mapView.mapType = MKMapTypeStandard;28. CLLocationCoordinate2D coords = CLLocationCoordinate2DMake(39.915352,116.3971

17、05);29. /北京故宫坐标点30. MKCoordinateSpan Span = 0.1, 0.1;31. MKCoordinateRegion region = MKCoordinateRegionMake(coords, Span);32. mapView setRegion:mapView regionThatFits:region animated:YES;33. self.view addSubview:mapView;34.QQ学习群:262779381 代码中用到了很多MKMapView中的属性,showsUserLocation属性是用于显示用户定于的大头针信息,我们会在

18、下一小节的内容中学习到如何在地图中添加大头针信息。IOS中提供的地图有3类:MKMapTypeStandard :普通地图MKMapTypeSatellite :卫星地图MKMapTypeHybrid :混合地图 MKCoordinateSpan方法是用来定义地图的精度,精度越小,在地图上返回的地理位置信息会越精确。MKCoordinateRegion方法用来确定地图显示的范围,它的两个参数分别代表了坐标和精度。最后通过setRegion方法将地图信息显示在mapView实例中。这样就完成了一个对特定坐标位置的地理位置的显示。 构建并运行,可以看到最后的北京故宫的地图的信息已经显示在屏幕上,如

19、图所示。 上面的方法是显示特定坐标点的地理位置信息,那么我们如何将设备现在所处的位置的地理位置信息显示在地图上呢?这里就还是要用到我们在12.1小节中提到的CLLocation类来实现了。在viewDidLoad方法中添加一个CLLocationManager类的实例,并设置代理,最后开启定位功能。QQ学习群:26277938135.- (void)viewDidLoad36.37. super viewDidLoad;38./ Do any additional setup after loading the view.39. CLLocationManager *locationManag

20、er = CLLocationManager allocinit;40. locationManager.delegate = self;41. locationManager startUpdatingLocation;42. mapView = MKMapView allocinitWithFrame:CGRectMake(0, 0, 320, 480);43. mapView.showsUserLocation = YES;44. mapView.delegate = self;45. mapView.mapType = MKMapTypeStandard;46. CLLocationC

21、oordinate2D coords = CLLocationCoordinate2DMake(39.915352,116.397105);47. MKCoordinateSpan Span = 0.1, 0.1;48. MKCoordinateRegion region = MKCoordinateRegionMake(coords, Span);49. mapView setRegion:mapView regionThatFits:region animated:YES;50. self.view addSubview:mapView;51.QQ学习群:262779381 然后通过定位的

22、代理方法去定位到当前位置的坐标信息,并将坐标信息在地图中显示。52.- (void)locationManager:(CLLocationManager *)manager53.didUpdateToLocation:(CLLocation *)newLocation54. fromLocation:(CLLocation *)oldLocation55.56.CLLocationCoordinate2D coordinate = 57.CLLocationCoordinate2DMake(newLocation.coordinate.latitude,newLocation.coordina

23、te.longitude);58. MKCoordinateSpan Span = 0.1,0.1;59. MKCoordinateRegion region = MKCoordinateRegionMake(coordinate, Span);60. mapView setRegion:mapView regionThatFits:region animated:YES;61. NSLog(当前位置坐标为:%f , %f,coordinate.longitude,coordinate.latitude);62. manager stopUpdatingLocation;63.QQ学习群:26

24、2779381QQ学习群:262779381 首先我们定义了以newLocation为坐标的新坐标作为当前的地理位置信息,然后同样的设置了地图的精度为0.1,开启定位系统之后,就可以定位到我们所在位置的地理位置信息了。因为IOS模拟器上的坐标位置选择的时Apple苹果公司总部的位置,所以构建并运行程序,可以看到最后在地图上显示的时苹果公司总部的地理位置。 当我们在使用地图应用时,经常需要在地图上做一些标注以起到一个提醒的作用,这就是地图大头针。在本节的内容中,我们会在上节内容的基础上,在地图中添加北京故宫博物院的大头针信息。 大头针的信息都定义在NSObject类中的一个名为MKAnnotat

25、ion的协议中,我们在XCode中查看它的API,可以看到它有1个必须实现的属性和2个可选的属性,还有一个设置坐标的方法,这个方法也是可选的,用户也可以自己定义。64.property (nonatomic, readonly) CLLocationCoordinate2D coordinate;65.optional66./ Title and subtitle for use by selection UI.67.property (nonatomic, readonly, copy) NSString *title;68.property (nonatomic, readonly, co

26、py) NSString *subtitle;69./ Called as a result of dragging an annotation view.70.-(void)setCoordinate:(CLLocationCoordinate2D)newCoordinate NS_AVAILABLE(NA, 4_0);QQ学习群:26277938112.3 MKAnnotation标注的使用 coordinate属性是一个必须定义的一个属性,因为没有坐标,那么就无法在地图中创建大头针了,其它两个可选的属性分别是对大头针的解释,比如可以添加该大头针对应的地址的名称和一些详细的信息。 我们打开

27、上小节内容的例子,在项目中新建一个以NSObject为父类的文件,并且将MKAnnotation协议添加到头文件中,还要定义一下协议中声明的属性和方法。 这里还要注意,如果在头文件中没有包含头文件,那么MKAnnotation协议也是无法包含进来的,因为这个协议也是属于MapKit框架中的,所以我们还要在头文件中引入MapKit头文件。71.#import 72.#import 73.interface CustomAnnotation : NSObject74.75. CLLocationCoordinate2D coordinate;76. NSString *title;77. NSSt

28、ring *subtitle;78.79.- (id)initWithCoordinate:(CLLocationCoordinate2D)coords;80.property (nonatomic, readonly) CLLocationCoordinate2D coordinate;81.property (nonatomic, copy) NSString *title;82.property (nonatomic, copy) NSString *subtitle;83.endQQ学习群:262779381 同时我们还使用了property语法,自动生成Getter和Setter方法

29、,但是因为coordinate属性我们在定义的时候使用的readonly,那么我们就无法对它生成Getter方法,这就要求我们自己对coordinate属性进行初始化操作。-CustomAnnotation.m-84.#import CustomAnnotation.h85.implementation CustomAnnotation86.synthesize coordinate,title,subtitle;87.- (id)initWithCoordinate:(CLLocationCoordinate2D)coords88.89. if (self = super init) 90.

30、 coordinate = coords;91. 92. return self;93.94.endQQ学习群:262779381这样我们就创建好了一个用于显示大头针信息的类,接下来我们就要在ViewController.m文件中去创建一个大头针类的实例,并将实例显示在地图当中。 我们实现一个创建大头针的方法。-ViewController.m-95.- (void)createAnnotationWithCoords:(CLLocationCoordinate2D)coords96.97. CLLocationCoordinate2D Coords = CLLocationCoordinat

31、e2DMake(39.915352,116.397105);98. CustomAnnotation *Annotation = CustomAnnotation allocinitWithCoordinate:Coords;99. Annotation.title = 故宫博物院;100. Annotation.subtitle = The Palace Museum;101. mapView addAnnotation:Annotation;102.QQ学习群:262779381首先我们还是要定义一个坐标点,用于插入大头针,然后创建并初始化一个大头针实例,并将开始创建的坐标信息作为大头针的

32、坐标,添加相应的标题和副标题,最后将大头针信息添加到地图中。 在viewDidLoad方法中调用我们的创建大头针方法,就可将大头针显示在地图中。因为我们是创建一个特定坐标位置的大头针信息,所以我们需要将上节例子中的定位系统关闭,locationManager startUpdatingLocation;删除这行代码。103.- (void)viewDidLoad104.105. 106. mapView setRegion:mapView regionThatFits:regionanimated:YES; 107. self.view addSubview:mapView;108. self createAnnotationWithCoords:coords;109.QQ学习群:262779381QQ学习群:262779381 本章通过讲解MKMapView与MKAnnotation讲解了IOS中地图位置的编程方法。QQ学习群:262779381本章小结课后习题课后习题1.在本章内容的基础上,实现即时定位功能,当手持手机走动时,能够即时获得设备的位置,并显示在地图上。2.在第一题的基础上,增加大头针,用于标注设备位置改变的情况。QQ学习群:262779381

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号