IOS 使用IOS6苹果地图
IOS应用程序中使用Map Kit API开发地图应用程序。其核心是MKMapView类的使用。我们可以设置地图显示方式,控制地图,可以在地图上添加标注。
1.显示地图
在Map Kit API中显示地图的师徒是MKMapView,他的委托协议是MKMapViewDelegate。Map Kit API使用需要导入MapKit框架。
下面通过一个实例介绍一下Map Kit API的使用,实例如图所示,再输入查询地点关键字文本框中输入关键字,单击查询,先进行地理信息编码查询,查询获得地标后在地图上标注出来。
首先添加框架MapKit.framework,设置视图,在ViewController.h代码如下:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "HBMapLocation.h" @interface HBMaPViewController : UIViewController<MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet UITextField *txtQueryKey;
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
- (IBAction)gecodeQuery:(id)sender;
- (IBAction)getMyPlace:(id)sender; @property (nonatomic ,readwrite)CLLocationCoordinate2D coordinate;
@end
其中头文件中的“HBMapLocation.h”是我们定义的描述地图标注点类,稍后再说。在ViewController.m中代码如下:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.mapView.mapType = MKMapTypeStandard;
self.mapView.delegate = self;
self.mapView.showsUserLocation = YES;
[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
}
其中viewDidLoad方法中设置地图的类型,他的类型有3种:
(1)MKMapTypeStandard标注地图类型
(2)MKMapTypeSatellite 卫星地图类型
(3)MKMapTypeHybrid混合地图类型。
2.添加标注
如果要实现在地图视图上添加标注点,需要两个步骤:第一步时触发添加动作;第二步是实现地图委托方法mapView:viewForAnnotation:完成添加标注。
2.1 触发添加动作
通过查询按钮触发添加标注代码如下:
- (IBAction)gecodeQuery:(id)sender {
if(_txtQueryKey.text == nil || [_txtQueryKey.text length] == )
{
return;
}
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
[geocoder geocodeAddressString:_txtQueryKey.text completionHandler:^(NSArray *placemarks, NSError *error) {
int i=[placemarks count];
NSLog(@"查询记录数:%i",i);
if([placemarks count]>)
{
[_mapView removeAnnotations:_mapView.annotations];
}
for (int i=; i<[placemarks count]; i++) {
CLPlacemark *placemark = placemarks[i];
//关闭键盘
[self.txtQueryKey resignFirstResponder];
//调整地图位置和缩放比例
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate, , );
[_mapView setRegion:viewRegion animated:YES];
HBMapLocation *annotation = [[HBMapLocation alloc]init];
annotation.streetAddress=placemark.thoroughfare;
annotation.city=placemark.locality;
annotation.state=placemark.administrativeArea;
annotation.zip=placemark.postalCode;
annotation.coordinate=placemark.location.coordinate;
[_mapView addAnnotation:annotation];
}
}];
}
2. 实现地图委托方法mapView:viewForAnnotation: 完成添加标注
- (IBAction)getMyPlace:(id)sender {
self.mapView.centerCoordinate = self.coordinate;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(self.coordinate, , );
[_mapView setRegion:viewRegion animated:YES];
}
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"];
if(annotationView == nil)
{
annotationView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"PIN_ANNOTATION"];
}
annotationView.pinColor = MKPinAnnotationColorPurple;
annotationView.animatesDrop = YES;
annotationView.canShowCallout = YES;
return annotationView;
}
3.跟踪用户位置变化
MapKit 提供个跟踪用户位置和方向变化的API,可以不用自己编写定位服务代码。开启地图的showUserLocation属性,并设置方法setUserTrackingMode:就可以了,其代码写在viewDidLoad中。
然后还需要实现地图视图委托方法mapView:didUpdateUserLocation: 代码如下
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
self.coordinate=userLocation.location.coordinate;
self.mapView.centerCoordinate = userLocation.location.coordinate;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, , );
[_mapView setRegion:viewRegion animated:YES];
}
其中自定义标注类HBMapLocation.h代码如下
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h> @interface HBMapLocation : NSObject<MKAnnotation> //街道信息属性
@property (nonatomic,copy)NSString *streetAddress;
//城市信息属性
@property (nonatomic,copy)NSString *city;
//州,省,市信息
@property (nonatomic,copy)NSString *state;
//邮编
@property (nonatomic,copy)NSString *zip;
//地理坐标
@property (nonatomic ,readwrite)CLLocationCoordinate2D coordinate; @end
HBMapLocation.m代码如下:
@implementation HBMapLocation -(NSString *)title
{
return @"要查找的位置";
} -(NSString *)subtitle
{
NSMutableString *ret = [NSMutableString new];
if(_state)
{
[ret appendString:_state];
}
if(_city)
{
[ret appendString:_city];
}
if(_city && _state)
{
[ret appendString:@", "];
}
if(_streetAddress && (_city || _state || _zip))
{
[ret appendString:@"?"];
}
if(_streetAddress)
{
[ret appendString:_streetAddress];
}
if(_zip)
{
[ret appendFormat:@", %@",_zip];
}
return ret;
} @end
运行如下:
IOS 使用IOS6苹果地图的更多相关文章
- iOS开发那些事-iOS6苹果地图实用开发
在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化.开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也同样适用于iOS5 ...
- iOS开发那些事-iOS6苹果地图有用开发
在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,可是API编程接口没有太大的变化.开发者不须要再学习非常多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也相同适用于iOS5 ...
- IOS 使用程序外地图(IOS Map and google Map)
1.调用IOS6苹果地图 IOS6中实现这个功能需要使用Map Kit中的MKPlaceMark和MKMapItem两个类,因此我们需要在工程中添加MapKit.framework主要代码如下: - ...
- iOS之定位与地图
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一 ...
- iOS开发---集成百度地图完善版
一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...
- 李洪强iOS开发之苹果使用预览截图
李洪强iOS开发之苹果使用预览截图 01 在预览的图片中选中你要截得区域 02 - command + C 03 - Command + N 04 - Command + S (保存)
- IOS定位核心与地图
IOS定位核心与地图 Core Location以及Map框架包通常能给我们的应用程序添加定位和地图相关的服务.Core Location框架包通常是使用硬件设备来进行 ...
- 李洪强iOS开发之苹果企业开发者账号申请流程
李洪强iOS开发之苹果企业开发者账号申请流程 一. 开发者账号类型选择 邓白氏码 DUNS number,是Data Universal Numbering System的缩写,是一个独一无二的9位数 ...
- IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息
IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocati ...
随机推荐
- WebStorm 7.0 注冊码
经測试 WebStorm 6 7均能够使用例如以下注冊码,简直就是神key啊! WebStorm 6.0 7.0 注冊码 User Name: EMBRACE License Key: ===== ...
- linux 自旋锁
一.概述: 自旋锁是SMP架构中的一种low-level的同步机制.当线程A想要获取一把自旋锁而该锁又被其它线程锁持有时,线程A会在一个循环中自旋以检测锁是不是已经可用了.对于自选锁需要注意: 由于自 ...
- Activity中异步操作showDialog异常解决方法:判断Ay是否结束
Android – Displaying Dialogs From Background Threads 判断一下Activity是否在finishing就好了,否则万一Activity销毁了,这个D ...
- iOS手机号正则表达式并实现344格式 (正则的另一种实现方式)
[Demo下载地址]https://git.oschina.net/remainedmute/PhoneNumDemo.git 相关博客http://www.jianshu.com/p/00da4d8 ...
- unexpected token: null near line 1, column 290
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: null near line 1, column 290 ...
- 启动tomcat的时候,服务器暂停到装载mysql驱动文件的原因
1.使用spring+mybatis,由于mybatis的配置文件中jdbc类型的错误使得,tomcat无法正常启动,在编写mybatis一定确保jdbc类型,java类型正确,jdbc类型要大写! ...
- css区分ie6,7,ff
IE6能识别*,但不能识别 !important,IE7能识别*,也能识别!important;FF不能识别*,但能识别!important; 可以这样区别FF,IE7,IE6: background ...
- Java中的流程控制(二)
关于Java程序的流程控制(二) 关于Java程序的流程控制(二) 3.switch选择语句 switch语句用于将一个表达式的值同许多其他值比较,并按比较结果选择下面该执行哪些语句. switch( ...
- Java文本编辑器中遇到的问题详解
今天介绍文件的读取和写入,分别用FileReader,FileWriter 1,FileWriter类(字符输出流类) 构造方法:FileWriter fw = new FileWriter(Stri ...
- Tensorflow tflearn 编写RCNN
两周多的努力总算写出了RCNN的代码,这段代码非常有意思,并且还顺带复习了几个Tensorflow应用方面的知识点,故特此总结下,带大家分享下经验.理论方面,RCNN的理论教程颇多,这里我不在做详尽说 ...