IOS百度地图之--->第二篇《大头针__简单使用及自定义》
呵呵!大家不要只看帖不回帖么,要不然我都没有积极性了。
第一步:创建一个用来呈现mapview的viewcontroller,不废话直接贴代码
? ? ? ?BasicMapViewController需要在该类中加入地图的代理并实现相关事件
//? ? 34.2778000000,108.9530980000 ? 数据来源http://www.gpsspg.com/maps.htm
#define xian? ? ? ? ? ? CLLocationCoordinate2DMake(34.2239390000,108.9807190000);
?
#import "BasicMapViewController.h"
#import “KHPaoPaoView.h”//气泡窗口
#import “KHPointAnnotation.h”//point
@interfaceBasicMapViewController ()
{
? ? BMKMapView *_mapView;
? ? NSBundle *bundle;
? ? NSArray *pointArr;
}
@end
?
@implementation BasicMapViewController
?
- (void)viewDidLoad {
? ? [superviewDidLoad];
? ? // Do any additional setup after loading the view.
? ? CGFloat navH = 64;
? ? if (__IPHONE_OS_VERSION < 7.0)
? ? {
? ? ? ? navH = 44;
? ? }
? ? _mapView? = [[BMKMapView alloc] initWithFrame:CGRectMake(0, navH+60, __SCREEN_SIZE.width, __SCREEN_SIZE.height-navH-60)];
//? ? _mapView.showMapScaleBar = NO;
//? ? _mapView.overlooking = 0;
? ? bundle = [NSBundle mainBundle];
?? ?
? ? [self.view addSubview:_mapView];
?? ?
? ? KHPointAnnotation *point = [[KHPointAnnotationalloc] init];
? ? point.title = @"西安市";
? ? point.subtitle = @"我在这";
? ? point.title1 = @"自定义泡泡测试";
? ? point.title2 = @"自定义测试";
? ? point.coordinate = xian;
?? ?
? ? BMKPointAnnotation *point1 = [[BMKPointAnnotationalloc] init];
? ? point1.title = @"北京市";
? ? point1.subtitle = @"0000000000000";
? ? point1.coordinate = CLLocationCoordinate2DMake(39.905206, 116.390356);
?? ?
? ? pointArr = @[point,point1];
?? ?
}
-(void)viewWillAppear:(BOOL)animated
{
? ? [_mapViewviewWillAppear];
? ? _mapView.delegate = self;// 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(void)viewWillDisappear:(BOOL)animated
{
? ? [_mapViewviewWillDisappear];
? ? _mapView.delegate = nil;// 不用时,置nil
}
- (IBAction)switchAction:(UISwitch *)sender
{
? ? if (sender.tag ==1)
? ? {
? ? ? ? if (sender.on)
? ? ? ? {
? ? ? ? ? ? [_mapViewsetMapType:BMKMapTypeStandard];
?? ? ? ? ? ?
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? [_mapViewsetMapType:BMKMapTypeSatellite];
? ? ? ? }
? ? }
? ? if (sender.tag == 2)
? ? {
? ? ? ? //第一参数地图中心位置,第二参数一中心点显示周围的经纬度差值
? ? ? ? if (sender.on)
? ? ? ? {
? ? ? ? ? ? [_mapViewsetRegion:BMKCoordinateRegionMake(CLLocationCoordinate2DMake(34.2778000000,108.9530980000), BMKCoordinateSpanMake(0.5,0.5)) animated:YES];
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? [_mapViewsetRegion:BMKCoordinateRegionMake(CLLocationCoordinate2DMake(39.905206, 116.390356), BMKCoordinateSpanMake(0.5,0.5)) animated:YES];
? ? ? ? }
? ? }
? ? if (sender.tag == 3)
? ? {
? ? ? ? [_mapView setTrafficEnabled:sender.on];
? ? }
}
?
- (void)mapViewDidFinishLoading:(BMKMapView *)mapView
{
? ? KHLog(@"地图加载完成");//回调事件请自行参考使用
? ? [_mapViewsetCompassPosition:CGPointMake(100,100)];//指南针位置可能看不见,这个和官方的交流吧!不清楚是什么原因
? ? [_mapViewaddAnnotations:pointArr];
}
?
- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
? ? KHLog(@"地图区域改变完成");
}
?
#pragma mark 设置大头针
-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation
{
? ? if([annotation isKindOfClass:[BMKPointAnnotation class]])
? ? {
? ? ? ? BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
? ? ? ? newAnnotationView.pinColor = BMKPinAnnotationColorRed;
? ? ? ? newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
? ? ? ? return newAnnotationView;
? ? }
? ? else
? ? {
? ? ? ? //? ? ? ? 这里使用自定义大头针
? ? ? ? BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
? ? ? ? newAnnotationView.image = [UIImageimageWithContentsOfFile:[bundlepathForResource:@"local@2x"ofType:@"png"]];
? ? ? ? newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
? ? ? ? KHPaoPaoView *paopao = [[KHPaoPaoView alloc] init];
? ? ? ? [paopao setAnnotationWith:((KHPointAnnotation *)annotation)];
? ? ? ? newAnnotationView.paopaoView = [[BMKActionPaopaoView alloc] initWithCustomView:paopao];
? ? ? ? return newAnnotationView;
? ? }
}
第二步:创建大头针相关的类、
? ? ? ?KHPointAnnotation这个类只要是实现了BMKAnnotation
? ? ?// 该类为一个抽象类,定义了基于BMKAnnotation的BMKShape类的基本属性和行为,不能直接使用,必须子类化之后才能使用
? ? ? @interface BMKShape : NSObject <BMKAnnotation> {
? ? ? } ?
?
#import "BMKPointAnnotation.h"
?
@interface KHPointAnnotation : BMKShape{
? ? @package
? ? CLLocationCoordinate2D _coordinate;
}
///该点的坐标
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
?
@property (strong) NSString *title1;
@property (strong) NSString *title2;
@end
?//.m中没什么东西就不贴了
?
KHPointAnnotation.h这个类继承自UIView ?主要就是大头针被选中后展示内容
?
#import <UIKit/UIKit.h>
#import "KHPointAnnotation.h"
?
@interface KHPaoPaoView : UIView
{
? ? UILabel *label1;
? ? UILabel *label2;
? ? UILabel *label3;
? ? UILabel *label4;
}
-(instancetype)init;
/**
?* ? 设置标注
?*
?* ? @param point 标注
?*/
-(void)setAnnotationWith:(KHPointAnnotation *)point;
@end
?
#import "KHPaoPaoView.h"
?
?
?
@implementation KHPaoPaoView
?
?
?
-(instancetype)init
?
{
?
? ? self = [super init];
?
? ? if (self)
?
? ? {
?
//? ? ? ? 这里需要注意百度地图中使用的是碎图片拼起来的,这里的细化工作呵呵你们自己完成吧!
?
? ? ? ? UIImage *image =[UIImageimageWithContentsOfFile:[[NSBundlemainBundle] pathForResource:@"medium@2x"ofType:@"png"]];
?
?? ? ? ?
?
? ? ? ? self.frame = CGRectMake(0, 0, image.size.width+10, image.size.height+10);
?
? ? ? ? UIImageView *IMG = [[UIImageViewalloc] initWithFrame:self.frame];
?
? ? ? ? IMG.image = image;
?
? ? ? ? IMG.contentMode = UIViewContentModeScaleAspectFit;
?
? ? ? ? [self addSubview:IMG];
?
?? ? ? ?
?
? ? ? ? label1 = [[UILabel alloc] initWithFrame:CGRectMake(10, 10,? __SCREEN_SIZE.width-100, 15)];
?
? ? ? ? [label1setFont:[UIFontsystemFontOfSize:14.0f]];
?
? ? ? ? [self addSubview:label1];
?
? ? ? ? label2 = [[UILabel alloc] initWithFrame:CGRectMake(10, 25,? __SCREEN_SIZE.width-100, 15)];
?
? ? ? ? [label2setFont:[UIFontsystemFontOfSize:14.0f]];
?
? ? ? ? [self addSubview:label2];
?
? ? ? ? label3 = [[UILabel alloc] initWithFrame:CGRectMake(10, 40,? __SCREEN_SIZE.width-100, 15)];
?
? ? ? ? [label3setFont:[UIFontsystemFontOfSize:14.0f]];
?
? ? ? ? [self addSubview:label3];
?
? ? ? ? label4 = [[UILabel alloc] initWithFrame:CGRectMake(10, 55,? __SCREEN_SIZE.width-100, 15)];
?
? ? ? ? [label4setFont:[UIFontsystemFontOfSize:14.0f]];
?
? ? ? ? [self addSubview:label4];
?
? ? }
?
? ? returnself;
?
}
?
-(void)setAnnotationWith:(KHPointAnnotation *)point
?
{
?
? ? label1.text = point.title;
?
? ? label2.text = point.subtitle;
?
? ? label3.text = point.title1;
?
? ? label4.text = point.title2;
?
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。