自定义大头针详情

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

  

posted @ 2016-04-28 14:27  o.0...w  阅读(194)  评论(0编辑  收藏  举报