iOS:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息
2015-10-19 22:41
891 查看
如何添加大头针(地标):
通过MapView的addAnnotation方法可以添加一个大头针到地图上
通过MapView的addAnnotations方法可以添加多个大头针到地图上
–(void)addAnnotation:(id <MKAnnotation>)annotation;
说明:需要传入一个遵守了MKAnnotation协议的对象
基本步骤为:
<1>新建一个遵守MKAnnotation协议的类:
@interface MyAnnotation : NSObject <MKAnnotation>
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@end
<2>添加Annotation:
MyAnnotation *anno = [[MyAnnotation alloc] init];
anno.title = @“中国";
anno.subtitle = @“北京”;
//经度和纬度
anno.coordinate = CLLocationCoordinate2DMake(40, 110);
//添加大头针到地图中
[_mapView addAnnotation:anno];
// 让地图挪动到对应的位置(经纬度交叉处)
[_mapView setCenterCoordinate:anno.coordinate animated:YES];
自定义大头针:
实现MapView的代理方法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *ID = @"anno";
MKPinAnnotationView *annoView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
if (annoView == nil) {
annoView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];
// 显示气泡
annoView.canShowCallout = YES;
// 设置绿色
annoView.pinColor = MKPinAnnotationColorGreen;
}
return annoView;
}
注意:可以通过设置MapAnnotationView的image属性来自定义大头针显示的图片
涉及的几个类一些属性或方法的介绍:
//大头针标注颜色枚举
typedef NS_ENUM(NSUInteger, MKPinAnnotationColor) {
MKPinAnnotationColorRed = 0,
MKPinAnnotationColorGreen,
MKPinAnnotationColorPurple
} ;
//大头针标注视图类
@interface MKPinAnnotationView : MKAnnotationView
@property (nonatomic) MKPinAnnotationColor pinColor; //大头针标注颜色
@property (nonatomic) BOOL animatesDrop; //是否显示水滴动态
@end
//标注视图类
@interface MKAnnotationView : NSView
- (instancetype)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString*)reuseIdentifier; //初始化
@property (nonatomic, readonly) NSString *reuseIdentifier; //重用标示符
@property (nonatomic, strong) id <MKAnnotation> annotation; //标注
@property (nonatomic, strong) UIImage *image; //图像
@property (nonatomic) BOOL canShowCallout; //是否显示气泡
@property (strong, nonatomic) UIView *leftCalloutAccessoryView; //气泡左视图(多用来显示图片)
@property (strong, nonatomic) UIView *rightCalloutAccessoryView; //气泡右视图(多用来显示图片)
具体的演示实例如下:
功能:首先创建一个标注在地图上显示当前的区域的名字,然后创建一个长按手势,当在人一个地点长按时,就会在长按的地方自动添加一个大头针标注,并且会显示一个气泡显示图片,地点名字信息可以待定.........
前期准备:
1.导入Mapkit框架:
2.导入一个图片素材,用来做大头针视图的一个图片显示:
3.自顶一个一个类,这个类实现了<MKAnnotation>协议,自定义类MyAnnotation截图为:
代码实现:
1.在自定义类的MYAnnotation.h文件声明大头针标注的属性
2、在ViewController.m文件中声明地图视图属性,并实现地图视图的协议
3、给指定位置创建一个标注,同时创建长按手势
4、处理长按手势事件,创建自定义的大头针标注
5、实现地图视图的代理方法
#pragma mark -mapView的代理方法
//显示标注和气泡,并在气泡上设置图片
//选中标注和取消标注时调用的方法
演示结果:(选中和取消标注时,输出结果就不打印了)
开始时: 点击大头针标注时:
再随意在某一个地方长按时出现一个新的大头这标注 点击大头标注时:
通过MapView的addAnnotation方法可以添加一个大头针到地图上
通过MapView的addAnnotations方法可以添加多个大头针到地图上
–(void)addAnnotation:(id <MKAnnotation>)annotation;
说明:需要传入一个遵守了MKAnnotation协议的对象
基本步骤为:
<1>新建一个遵守MKAnnotation协议的类:
@interface MyAnnotation : NSObject <MKAnnotation>
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@end
<2>添加Annotation:
MyAnnotation *anno = [[MyAnnotation alloc] init];
anno.title = @“中国";
anno.subtitle = @“北京”;
//经度和纬度
anno.coordinate = CLLocationCoordinate2DMake(40, 110);
//添加大头针到地图中
[_mapView addAnnotation:anno];
// 让地图挪动到对应的位置(经纬度交叉处)
[_mapView setCenterCoordinate:anno.coordinate animated:YES];
自定义大头针:
实现MapView的代理方法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *ID = @"anno";
MKPinAnnotationView *annoView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
if (annoView == nil) {
annoView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];
// 显示气泡
annoView.canShowCallout = YES;
// 设置绿色
annoView.pinColor = MKPinAnnotationColorGreen;
}
return annoView;
}
注意:可以通过设置MapAnnotationView的image属性来自定义大头针显示的图片
涉及的几个类一些属性或方法的介绍:
//大头针标注颜色枚举
typedef NS_ENUM(NSUInteger, MKPinAnnotationColor) {
MKPinAnnotationColorRed = 0,
MKPinAnnotationColorGreen,
MKPinAnnotationColorPurple
} ;
//大头针标注视图类
@interface MKPinAnnotationView : MKAnnotationView
@property (nonatomic) MKPinAnnotationColor pinColor; //大头针标注颜色
@property (nonatomic) BOOL animatesDrop; //是否显示水滴动态
@end
//标注视图类
@interface MKAnnotationView : NSView
- (instancetype)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString*)reuseIdentifier; //初始化
@property (nonatomic, readonly) NSString *reuseIdentifier; //重用标示符
@property (nonatomic, strong) id <MKAnnotation> annotation; //标注
@property (nonatomic, strong) UIImage *image; //图像
@property (nonatomic) BOOL canShowCallout; //是否显示气泡
@property (strong, nonatomic) UIView *leftCalloutAccessoryView; //气泡左视图(多用来显示图片)
@property (strong, nonatomic) UIView *rightCalloutAccessoryView; //气泡右视图(多用来显示图片)
具体的演示实例如下:
功能:首先创建一个标注在地图上显示当前的区域的名字,然后创建一个长按手势,当在人一个地点长按时,就会在长按的地方自动添加一个大头针标注,并且会显示一个气泡显示图片,地点名字信息可以待定.........
前期准备:
1.导入Mapkit框架:
2.导入一个图片素材,用来做大头针视图的一个图片显示:
3.自顶一个一个类,这个类实现了<MKAnnotation>协议,自定义类MyAnnotation截图为:
代码实现:
1.在自定义类的MYAnnotation.h文件声明大头针标注的属性
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface MyAnnotation : NSObject<MKAnnotation> @property (assign,nonatomic)CLLocationCoordinate2D coordinate; //经纬度坐标 @property (copy,nonatomic)NSString *title; //大头针标注标题 @property (copy,nonatomic)NSString *subtitle; //大头针标注子标题 @end
2、在ViewController.m文件中声明地图视图属性,并实现地图视图的协议
#import "ViewController.h" #import <MapKit/MapKit.h> #import "MyAnnotation.h" @interface ViewController ()<MKMapViewDelegate> @property (strong,nonatomic)MKMapView *mapView; //声明地图视图控件 @end
3、给指定位置创建一个标注,同时创建长按手势
- (void)viewDidLoad { [super viewDidLoad]; //创建Map实例 self.mapView = [[MKMapView alloc]initWithFrame:self.view.frame]; //设置地图的类型 self.mapView.mapType = MKMapTypeStandard; //设置地图的代理 self.mapView.delegate = self; //将地图视图添加到控制器视图中 [self.view addSubview:self.mapView]; //创建一个标注 MyAnnotation *annotation = [[MyAnnotation alloc]init]; //设置北京的经纬度 annotation.coordinate = CLLocationCoordinate2DMake(40, 110); annotation.title = @"中国"; annotation.subtitle = @"北京"; //添加标注 [self.mapView addAnnotation:annotation]; //让地图显示标注的区域 [self.mapView setCenterCoordinate:annotation.coordinate animated:YES]; //添加一个长按longPress手势 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)]; [self.mapView addGestureRecognizer:longPress]; }
4、处理长按手势事件,创建自定义的大头针标注
-(void)longPress:(UILongPressGestureRecognizer *)sender { //获取当前位置 CGPoint location = [sender locationInView:self.view]; //经纬度 CLLocationCoordinate2D coordinate = [self.mapView convertPoint:location toCoordinateFromView:self.mapView]; //创建新的标注 MyAnnotation *annotation = [[MyAnnotation alloc]init]; annotation.coordinate = coordinate; annotation.title = @"新标注"; annotation.subtitle = @"待开发..."; //添加标注 [self.mapView addAnnotation:annotation]; }
5、实现地图视图的代理方法
#pragma mark -mapView的代理方法
//显示标注和气泡,并在气泡上设置图片
#pragma mark 显示标注视图 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { //设置重用标示符 static NSString *annotationID = @"annotation"; //先从重用的队列中找 MKPinAnnotationView *view = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationID]; //没找到就创建 if (!view) { view = [[MKPinAnnotationView alloc]init]; } //设置属性 view.annotation = annotation; view.canShowCallout = YES;//显示气泡 view.pinColor = MKPinAnnotationColorGreen;//大头针颜色 //显示图片,取代大头针 //view.image = [UIImage imageNamed:@"1.png"]; //在气泡视图中显示图片 view.rightCalloutAccessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.png"]]; return view; }
//选中标注和取消标注时调用的方法
#pragma mark 选中了标注的处理事件 -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { NSLog(@"选中了标注"); } #pragma mark 取消选中标注的处理事件 -(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view { NSLog(@"取消了标注"); }
演示结果:(选中和取消标注时,输出结果就不打印了)
开始时: 点击大头针标注时:
再随意在某一个地方长按时出现一个新的大头这标注 点击大头标注时:
相关文章推荐
- iOS—— 秒学远程推送
- ios开发如何让navigationItem自带的返回按钮设置成图片或者不显示文字
- iOS自定义相机界面
- IOS开发基础知识--碎片25
- iOS中ASI
- 回顾这一个月以来所学到的ios知识
- iOS 直播
- iOS8.1 编译ffmpeg和集成第三方实现直播(监控类)
- iOS:地图:MapKit和CoreLocation
- ios中的coredata的使用
- 使用IOS7原生API进行二维码条形码的扫描
- Xcode常用快捷键
- 刚把ios 环境做好 截个图庆祝一下
- IOS——MD5加密
- Block - 2
- ios程序开发中用到的加密方式
- iOS 加载大量高清图片, 内存警告导致crash
- 模仿 ios 分段单选
- IOS 多线程
- iOS --- 使用CoreTelephony来获取运营商信息