zoukankan      html  css  js  c++  java
  • iOS--BaiduMap自定义annotation和annotationView

    //导入<BaiduMapAPI_Map/BMKMapComponent.h>库
    
    #import "AppDelegate.h"
    #import "MainViewController.h"
    #import <BaiduMapAPI_Map/BMKMapComponent.h>
    
    //遵循代理
    @interface AppDelegate ()<BMKGeneralDelegate>
    
    @end
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        [self.window makeKeyAndVisible];
        self.window.backgroundColor = [UIColor whiteColor];
        
        MainViewController *mainVC = [[MainViewController alloc] init];
        UINavigationController *mainNC = [[UINavigationController alloc] initWithRootViewController:mainVC];
        self.window.rootViewController = mainNC;
        
        //初始化    
        BMKMapManager *mapManager = [[BMKMapManager alloc]init];
        [mapManager start:@"填入申请的key" generalDelegate:self];
        
        return YES;
    }
                                                                                                          
    /*
    *在MainViewController.m里创建地图
    */
    @implementation MapViewController
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [_mapView viewWillAppear];
        _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
    }
    -(void)viewWillDisappear:(BOOL)animated
    {
        [_mapView viewWillDisappear];
        _mapView.delegate = nil; // 不用时,置nil
    }
    
    #pragma mark--------数据请求--------
    - (void)dataHandle {
        //网络获取annotation信息
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        manager.responseSerializer = [AFJSONResponseSerializer serializer];
        manager.requestSerializer = [AFJSONRequestSerializer serializer];
        [manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSArray *tempArr = [responseObject objectForKey:@"data"];
            for (int i = 0; i < tempArr.count; i ++) {
               //model类
                MapItem *mapItem = [[MapItem alloc] initWithDic:[tempArr objectAtIndex:i]];
                [self.mapItemArr addObject:mapItem];
                CLLocationCoordinate2D coor;
                coor.latitude = [mapItem.longitude floatValue];
                coor.longitude = [mapItem.latitude floatValue];
               //自定义MMAnnotation
                MMAnnotation *annotation = [[MMAnnotation alloc]initWithCoordinate2D:coor];
                annotation.address = mapItem.position;
                annotation.title = mapItem.name;
                annotation.imageUrl = mapItem.pictureUrl;
                annotation.context = mapItem.synopsis;
                //添加annotation到地图
                [self.mapView addAnnotation:annotation];
            }
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];
    }
    
    - (void)viewDidLoad {
    
        [super viewDidLoad];
        self.mapItemArr = [NSMutableArray array];
        [self dataHandle];
           
        //地图设置
        self.mapView = [[BMKMapView alloc]initWithFrame:CGRectMake1(0, 0, 320, 480)];
        self.mapView.delegate = self;
        //缩放比例
        self.mapView.zoomLevel = 15.0;
        //地图中心点坐标
        self.mapView.centerCoordinate = CLLocationCoordinate2DMake(37.569872, 121.260381);
        self.view = self.mapView;
        //切换为普通地图
        [self.mapView setMapType:BMKMapTypeStandard];
       /*
        *   切换为卫星图
        *   [self.mapView setMapType:BMKMapTypeSatellite];
        */
        //实时路况图层   YES开启  NO关闭
        [self.mapView setTrafficEnabled:NO];
    }
    
    #pragma mark----------百度地图大头针设置--------------
    /*重写- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation代理方法,指定annotation为自定义的类型
    */
    - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(MMAnnotation *)annotation
    {
        int i = 0;
        if ([annotation isKindOfClass:[MMAnnotation class]] == YES) {
            
            BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
            //自定义的弹出视图
            MMView *mmView = [[MMView alloc] initWithFrame:CGRectMake1(0, 0, 280, 150)];
            //将annotation信息显示在自定义弹出视图上
            mmView.titleLabel.text = annotation.title;
            mmView.contextLabel.text = annotation.context;
            [mmView.imageView sd_setImageWithURL:[NSURL URLWithString:annotation.imageUrl]];
            mmView.addressLabel.text = annotation.address;
            //BaiduMap承载annotation详情的气泡形状视图
            BMKActionPaopaoView *paoView = [[BMKActionPaopaoView alloc] initWithCustomView:mmView];
           //不设置会出现重叠或卡顿
            paoView.backgroundColor = [UIColor whiteColor];
            paoView.frame = CGRectMake1(0, 0, 280, 150);
            newAnnotationView.paopaoView = nil;
            newAnnotationView.paopaoView = paoView;
           //默认annotation的颜色
            newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
           /*
            *自定义annotation显示图片
            * newAnnotationView.image = [UIImage imageNamed:@"annotation.png"]
           */
            newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
            return newAnnotationView;
        }
        i ++;
        return nil;
    }                        
    /*
     *在MMAnnotation.h里
    */
    @interface MMAnnotation : NSObject<BMKAnnotation>
    
    @property (nonatomic, copy) NSString *title;
    @property (nonatomic, copy) NSString *imageUrl;
    @property (nonatomic, copy) NSString *context;
    @property (nonatomic, copy) NSString *address;
    
    @property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
    
    - (id)initWithCoordinate2D:(CLLocationCoordinate2D)coordinate;
    
    @end
    
    /*
     *在MMAnnotation.m里
    */
    @implementation MMAnnotation
    
    
    - (id)initWithCoordinate2D:(CLLocationCoordinate2D)coordinate {
        self = [super init];
        if (self != nil) {
            _coordinate = coordinate;
        }
        return self;
    }
    
    @end
    /*
     *在MMView里定义需要的控件
     */
    @interface MMView : UIView
    
    @property (nonatomic, strong) UIImageView *imageView;
    @property (nonatomic, strong) UILabel *titleLabel;
    @property (nonatomic, strong) UILabel *contextLabel;
    @property (nonatomic, strong) UILabel *addressLabel;
    
    @end
  • 相关阅读:
    c#过滤所有换行符和多余空格
    个人整理网站外链专用
    C++操作符的优先级
    winform下richtextbox 特定字符颜色的改变
    触摸屏网站制作的小细节
    DEDECMS 批量替换alt为空的文章为文章标题的MYSQL语句
    天涯海客邮件搜索群发大师 使用说明
    天涯论坛自动回帖软件免费版使用说明
    c# winform窗口控件委托传参数的写法
    论坛自动回帖软件终于在多特软件站发布成功了
  • 原文地址:https://www.cnblogs.com/zhangshan/p/5157419.html
Copyright © 2011-2022 走看看