iOS-BMK标注

在iOS开发中,地图算是一个比较重要的模块。我们常用的地图有高德地图,百度地图,谷歌地图,对于中国而言,苹果公司已经不再使用谷歌地图,官方使用的是高德地图。下面将讲述一下百度地图开发过程中的一些小的知识点。

对于如何配置百度地图的开发环境,在此不再讲述,具体可以参考:http://developer.baidu.com/map/index.php?title=iossdk/guide/buildproject

百度地图iOS的API下载地址:http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download

关于百度地图的基本使用,我们可以参考百度地图的开发文档,在此主要总结一下开发文档中一些重要的知识点和延伸点。(地图版本IOS SDK 2.9.0)

首先说明一下百度地图开发中可能遇到的问题:

如何添加标注(系统标注和自定义标注)

 1 //添加标记
 2 -(void)viewDidAppear:(BOOL)animated
 3 {
 4     /*
 5     for (int i = 0; i < 3; i++) {
 6         BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
 7         CLLocationCoordinate2D coor;
 8         coor.latitude = 39.915 + i*2;
 9         coor.longitude = 116.404 + i*2;
10         annotation.coordinate = coor;
11         annotation.title = @"这里是北京";
12         [myMapView addAnnotation:annotation];
13     }
14     */
15     BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
16     CLLocationCoordinate2D coor;
17     coor.latitude = 39.915;
18     coor.longitude = 116.404;
19     annotation.coordinate = coor;
20     annotation.title = @"这里是北京";
21     annotation.subtitle = @"1";
22     //[myMapView addAnnotation:annotation];
23
24     BMKPointAnnotation* annotation1 = [[BMKPointAnnotation alloc]init];
25     CLLocationCoordinate2D coor1;
26     coor1.latitude = 38.915;
27     coor1.longitude = 113.404 + 2;
28     annotation1.coordinate = coor1;
29     annotation1.title = @"这里也是北京";
30     annotation1.subtitle = @"2";
31     //[myMapView addAnnotation:annotation1];
32
33     BMKPointAnnotation* annotation2 = [[BMKPointAnnotation alloc]init];
34     CLLocationCoordinate2D coor2;
35     coor2.latitude = 38.915;
36     coor2.longitude = 119.404 + 2;
37     annotation2.coordinate = coor2;
38     annotation2.title = @"这里同样是北京";
39     annotation2.subtitle = @"3";
40     //[myMapView addAnnotation:annotation2];
41
42     NSArray *arr = [NSArray arrayWithObjects:annotation,annotation1,annotation2, nil];
43     [myMapView addAnnotations:arr];
44 }
45
46 -(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation
47 {
48     if ([annotation isKindOfClass:[BMKPointAnnotation class]])
49     {
50         BMKPinAnnotationView *newAnnotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationView"];
51         newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"AnnotationView"];
52         newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
53         newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
54         return newAnnotationView;
55     }
56     return nil;
57 }

系统标记

如何自定义大头针

自定义大头针就是改变大头针的样式,如你想使用自己的图片代替上面显示的样式,代码实现跟上面的代码基本一样。只是在上面代理实现的代码中加入下面的代码即可。

1 newAnnotationView.image = [UIImage imageNamed:@"2"]; (图片显示的大小,可以通过newAnnotationView的frame设定)

如何修改气泡样式

在气泡上默认是可以显示两行信息,一个title,一个subtitle,在此仅修改气泡的样式,如边框大小,字体,等基本信息,没有改变总体布局。

 1 -(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation
 2 {
 3     if ([annotation isKindOfClass:[BMKPointAnnotation class]])
 4     {
 5         BMKPinAnnotationView *newAnnotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationView"];
 6         newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"AnnotationView"];
 7         newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
 8         newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
 9
10         UIView *view = [[UIView alloc]init];
11         view.frame = CGRectMake(0, 0, 100, 60);
12         view.backgroundColor = [UIColor greenColor];
13         [view.layer setMasksToBounds:YES];
14         [view.layer setCornerRadius:3];
15         view.alpha = 0.9;
16
17         UILabel *label1 = [[UILabel alloc]init];
18         label1.frame = CGRectMake(0, 0, 100, 30);
19         label1.text = annotation.title;
20         label1.numberOfLines = 0;
21         label1.font = [UIFont systemFontOfSize:12];
22         label1.textColor = [UIColor blackColor];
23         [view addSubview:label1];
24
25         UILabel *label2 = [[UILabel alloc]init];
26         label2.frame = CGRectMake(0, 30, 100, 30);
27         label2.text = annotation.subtitle;
28         label2.numberOfLines = 0;
29         label2.font = [UIFont systemFontOfSize:10];
30         label2.textColor = [UIColor lightGrayColor];
31         [view addSubview:label2];
32
33         BMKActionPaopaoView *pView = [[BMKActionPaopaoView alloc]initWithCustomView:view];
34         pView.frame = CGRectMake(0, 0, 100, 60);
35         ((BMKPinAnnotationView *)newAnnotationView).paopaoView = pView;
36         return newAnnotationView;
37     }
38     return nil;
39 }

简单定义气泡样式

如果我们想要修改气泡的布局怎样处理呢?

因为系统默认的一个是坐标,一个标题,一个子标题,我们想要按照自己的方式布局弹出的气泡,我们需要做什么工作呢?

首先系统提供BMKPointAnnotation的方法不够我们使用,我们需要继承这个类,假如新类为myPoint,添加一些新的属性。比如这个类,我们需要添加三个属性。

分别是NSString *imgName ; NSString *placeName; NSString *idNum;

接下来我们我们需要自定义气泡,气泡本身是一个UIView,我们可以在继承于UIView,创建一个子类myPaopao;在myPaopao里面要添加三个控件,显示上面定义的三个属性。

1 #import <UIKit/UIKit.h>
2
3 @interface myPaopao : UIView
4 @property(nonatomic,retain)UIImageView *imgView;
5 @property(nonatomic,retain) UILabel *placeName;
6 @property(nonatomic,retain) UILabel *idNum;
7
8 @end

myPaopao.h

 1 #import "myPaopao.h"
 2
 3 @implementation myPaopao
 4
 5 -(instancetype)initWithFrame:(CGRect)frame
 6 {
 7     self = [super initWithFrame:frame];
 8     if (self)
 9     {
10         self.frame = CGRectMake(0, 0, 150, 60);
11         self.backgroundColor = [UIColor whiteColor];
12
13         _imgView = [[UIImageView alloc]init];
14         _imgView.frame = CGRectMake(0, 0, 60, 60);
15         [self addSubview:_imgView];
16
17         _placeName = [[UILabel alloc]init];
18         _placeName.frame = CGRectMake(60, 0, 90, 30);
19         _placeName.font = [UIFont systemFontOfSize:12];
20         [self addSubview:_placeName];
21
22         _idNum = [[UILabel alloc]init];
23         _idNum.frame = CGRectMake(60, 30, 90, 30);
24         [self addSubview:_idNum];
25
26     }
27     return self;
28 }
29 @end

myPaopao.m

 1 //添加标记
 2 -(void)viewDidAppear:(BOOL)animated
 3 {
 4     myPoint* annotation = [[myPoint alloc]init];
 5     CLLocationCoordinate2D coor;
 6     coor.latitude = 39.915;
 7     coor.longitude = 116.404;
 8     annotation.coordinate = coor;
 9     annotation.imgName = @"1.jpg";
10     annotation.placeName = @"这里是北京";
11     annotation.idNum = @"1";
12     [myMapView addAnnotation:annotation];
13
14     myPoint* annotation1 = [[myPoint alloc]init];
15     CLLocationCoordinate2D coor1;
16     coor1.latitude = 38.915;
17     coor1.longitude = 113.404 + 2;
18     annotation1.coordinate = coor1;
19     annotation1.imgName = @"2.jpg";
20     annotation1.placeName = @"这里也是北京";
21     annotation1.idNum = @"2";
22     [myMapView addAnnotation:annotation1];
23
24 }
25 -(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation
26 {
27     if ([annotation isKindOfClass:[myPoint class]])
28     {
29         myPoint *myAnnotation = (myPoint *)annotation;
30
31         BMKPinAnnotationView *newAnnotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationView"];
32         newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"AnnotationView"];
33         newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
34         newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
35         myPaopao *paopapo = [[myPaopao alloc]init];
36
37         paopapo.imgView.image = [UIImage imageNamed:myAnnotation.imgName];
38         paopapo.placeName.text = myAnnotation.placeName;
39         paopapo.idNum.text = myAnnotation.idNum;
40         BMKActionPaopaoView *pView = [[BMKActionPaopaoView alloc]initWithCustomView:paopapo];
41         ((BMKPinAnnotationView *)newAnnotationView).paopaoView = pView;
42         return newAnnotationView;
43     }
44     return nil;
45 }

实现代码

如果有需要,我们还可以添加一个按钮,跳转到详情界面,添加按钮的方法,与上面的方法相同,在此

点聚合功能

点聚合功能是v2.9.0新增加的一个功能,如果在一个区域有大量的点,会产生覆盖现象,点聚合功能可以实现将很多点聚合到一个点上,通过缩放比例,可以显示更多点或聚合点。我们在下载SDK的时候,会带有一个Demo,从Demo中我们可以找到相应的实现代码。在开发文档中给出了我们核心代码:

时间: 2024-07-30 09:38:41

iOS-BMK标注的相关文章

iOS百度地图-BMK标注&amp;amp;覆盖物

在iOS开发中,地图算是一个比较重要的模块.我们常用的地图有高德地图,百度地图,谷歌地图,对于中国而言,苹果公司已经不再使用谷歌地图,官方使用的是高德地图.下面将讲述一下百度地图开发过程中的一些小的知识点. 对于如何配置百度地图的开发环境,在此不再讲述,具体可以参考:http://developer.baidu.com/map/index.php?title=iossdk/guide/buildproject 百度地图iOS的API下载地址:http://developer.baidu.com/

iOS设计标注处理方法

如果设计只给3x的设计图 在做2x适配时有几种处理方法: 按逻辑像素,大小不变,比如3x手机上一张图的逻辑像素设为24x24point,那么2x手机上这张图的大小也设为24x24point,一般适用于一个视图高度固定的情况,例如一个app的底部tab栏或者上方的导航栏.一个小风险是2x手机上横向可能会有点挤,甚至有重合.如果逻辑像素大小不变的话都会有这个问题. 按比例缩放,比如3x手机上,如6p,一个视图的大小为414x414,那么2x手机上,如iPhone6,这个视图的大小就是375x375,

学习笔记:APP切图那点事儿–详细介绍android和ios平台

学习笔记:APP切图那点事儿–详细介绍android和ios平台 转载自:http://www.woofeng.cn/articles/168.html   版权归原作者所有 作者:亚茹有李 原文地址:http://blog.boocss.com/app-android-ios/ 一.android版 在做android版本设计的时候,尺寸有很多种,这时我们要以一种尺寸为基准,那这个基准尺寸是480px*800px,设计图完成之后就开始切图了 需要注意的: A:android主要有3种屏,即:

iOS标注和适配

很多项目一开始没有注意美术素材的规范,这在后期会引起混乱.假如有机会做一个新项目(旧项目会有自己的历史问题,一下子很难改过来),建议设计师和程序员一起坐下来.共同设立一套规范,之后共同遵守. 下面说说我自己用的规范,并解释一下原因. 界面名字 每个界面需定出一个前缀.比如主页,前缀是 home,设置前缀为 settings,课程表是 lesson. 定好前缀之后.设计师就可以建立文件夹: 主页(home)设置(settings)课程表(lesson)课程概述(overview)共用(shared

iOS 输入地点 显示当前位置地图并用大头针标注

废话不多说 直接上项目工程  ,还是 先看下效果图吧! 项目中有两个文件,chonViewController 和mapLocation文件 ,mapLocation 文件用于地标显示 并有附加信息,昨天做得时候附加信息显示正常,今天想写点博客 却不显示了 ,很郁闷! 新建工程后 记得加入类库,MapKit.framework 具体添加方法 这里不在说明了 下面 看下 chonViewController.h 文件 代码如下: #import <UIKit/UIKit.h> #import &

iOS原生地图开发指南续——大头针与自定义标注

iOS原生地图开发指南续——大头针与自定义标注 出自:http://www.sxt.cn/info-6042-u-7372.html 在上一篇博客中http://my.oschina.net/u/2340880/blog/415360系统总结了iOS原生地图框架MapKit中主体地图的设置与应用.这篇是上一篇的一个后续,总结了系统的大头针视图以及自定义标注视图的方法. 一.先来认识一个协议MKAnnotation 官方文档告诉我们,所有标注的类必须遵守这个协议.所以可以了解,标注这个概念在逻辑属

IOS 百度地图使用问题(同一个标注只能点击一次)

//点击同一个标注只执行一次,要点击其他的标注或者拖动地图再点击才会执行 1.- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view 解决: 在每次执行的时候调用一下这个 [mapView deselectAnnotation:view.annotation animated:YES];

iOS第三方地图-百度地图常用功能使用(POI搜索,地理正反编码,定位,添加标注)

百度地图官网: http://developer.baidu.com/map/index.php?title=iossdk 百度地图集成 1.引入相关包 注:不需要使用地图功能的可以不用boundle包,模拟器使用的framework和真机不一样具体看官网 2.info.plist中 3.在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC. 4.将一个文件设置为.mm 百度地图使用 1.AppDelegate中注册 _mapManager

IOS 设置百度地图自定义标注图片,自定义泡泡

#pragma mark - BMKMapViewDelegate // 根据anntation生成对应的View - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation { //普通annotation NSString *AnnotationViewID = @"ClusterMark"; ClusterAnnotation

iOS 离屏渲染的研究

GPU渲染机制: CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示. GPU屏幕渲染有以下两种方式: On-Screen Rendering意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. Off-Screen Rendering意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作. 特殊的离屏渲染:如果将不在GPU的当