自定义大头针详情
#import "ViewController.h" #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> #import "CZMeiTuan.h" #import "CZTuanGouAnnotation.h" #import "CZDetailAnnotation.h" #import "MKTuangouAnnotationView.h" #import "CZDetailAnnotationView.h" @interface ViewController ()<MKMapViewDelegate> @property (nonatomic, strong) NSArray *allData; //数组中存放数据模型 美团的后台信息 @property (weak, nonatomic) IBOutlet MKMapView *mapView; @end @implementation ViewController - (NSArray *)allData { //添加自定义大头针 模块 //2颗 //模拟服务器 的后台数据 //采集 数据 // 北京 119 39 ktv 广州 118 23 饭店 if (!_allData) { CZMeiTuan *tg1 = [[CZMeiTuan alloc] init]; tg1.title = @"饭店"; tg1.desc = @"美食是人生的一大乐趣!"; tg1.icon = @"category_1"; tg1.image = @"fandian"; tg1.coordinate = CLLocationCoordinate2DMake(39, 119); CZMeiTuan *tg2 = [[CZMeiTuan alloc] init]; tg2.title = @"xxxKTV"; tg2.desc = @"唱歌是人生的另一大乐趣!"; tg2.icon = @"category_5"; tg2.image = @"ktv"; tg2.coordinate = CLLocationCoordinate2DMake(23, 118); _allData = @[tg1,tg2]; } return _allData; } - (void)viewDidLoad { [super viewDidLoad]; // 需求 //根据后台数据 添加团购大头针 数组中有几个模型 就添加一个大头针视图 -> 添加大头针模型就会添加一个视图 for (CZMeiTuan *meituan in self.allData) { CZTuanGouAnnotation *tuangouAnno = [[CZTuanGouAnnotation alloc]init]; tuangouAnno.coordinate = meituan.coordinate; //tuangouAnno.imageName = meituan.icon; tuangouAnno.meiTuan = meituan; [self.mapView addAnnotation:tuangouAnno]; } } //每添加一个大头针模型 就会调用 返回一个对应的 大头针视图 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { if ([annotation isKindOfClass:[CZDetailAnnotation class]]) { //返回详情的大头针视图 static NSString *ID = @"desc"; CZDetailAnnotationView *detailAnnoView = (CZDetailAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID]; if (detailAnnoView == nil) { detailAnnoView = [[CZDetailAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:ID]; } //详情大头针模型给详情大头针视图赋值 meituan 团购数据信息 CZDetailAnnotation *detailAnno = (CZDetailAnnotation *)annotation; detailAnnoView.meiTuan = detailAnno.meiTuan; return detailAnnoView; }else if ([annotation isKindOfClass:[CZTuanGouAnnotation class]]) { static NSString *ID = @"anno"; MKTuangouAnnotationView *annoView = (MKTuangouAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID]; if (annoView == nil) { annoView = [[MKTuangouAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:ID]; } CZTuanGouAnnotation *tuangouAnno = (CZTuanGouAnnotation *)annotation; annoView.image = [UIImage imageNamed:tuangouAnno.meiTuan.icon]; return annoView; }else{ return nil; } return nil;
//
//系统的大头针
MKPinAnnotationView * pin = [[MKPinAnnotationView alloc]init]; 系统的大头针 可以就该大头针的颜色 等等
} //选中了一个大头针视图就会调用 参数2 点击的 那个视图 - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { //四个 角色 //团购大头针模型 团购大头针视 详情大头针模型 图 详情大头针视图 if ([view isKindOfClass:[MKTuangouAnnotationView class]]) { //再添加另一颗大头针 位置一样 CZTuanGouAnnotation *tuangouAnnoTap = (CZTuanGouAnnotation *)view.annotation; if (!tuangouAnnoTap.isShowDetail) { //不显示 才添加 //删除之前的所有大头针 详情模型 -> isShowDetail = NO 然后再添加新的 -> isShowDetail = YES //删除所有详情模型 for (id objc in self.mapView.annotations) { //详情模型 if ([objc isKindOfClass:[CZDetailAnnotation class]]) { [self.mapView removeAnnotation:objc]; }else{ } } //删除所有详情模型了 对于 团购模型来说 isShowDetail = NO for (id objc in self.mapView.annotations) { if ([objc isKindOfClass:[CZTuanGouAnnotation class]]) { CZTuanGouAnnotation *tuangouAnno = (CZTuanGouAnnotation *)objc; tuangouAnno.isShowDetail = NO; } } //创建详情模型 -> 团购 模型 应该置为 YES CZTuanGouAnnotation *tuangouAnno = (CZTuanGouAnnotation *)view.annotation; CZDetailAnnotation *detailAnno = [[CZDetailAnnotation alloc]init]; detailAnno.coordinate = tuangouAnno.coordinate; //MKTuangouAnnotationView *tuangouAnnoTationView = (MKTuangouAnnotationView *)view; //CZTuanGouAnnotation *annoTuangou = tuangouAnnoTationView.annotation; detailAnno.meiTuan = tuangouAnno.meiTuan; //详情大头针视图的bug //2.同时只能显示一个大头针详情视图 删除没必要的 //1.已经存在的大头针详情视图 没必要再添加一遍 //是否已经显示 没有显示才需要添加 -> 添加行为 考虑一下 //BOOL 来表达 团购大头针视图 的 详情是否展示 tuangouAnno.isShowDetail = YES; //添加模型 [self.mapView addAnnotation:detailAnno]; }else{ //已经 显示 } }else{ } }