#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{
}
}