您的位置:首页 > 其它

自定义大头针详情

2016-04-28 14:27 239 查看
#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{
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: