导航地图2_自定义标注

@interface ViewController () <MKMapViewDelegate>

@property (nonatomic, weak) MKMapView *mapView;

@end

@implementation ViewController

#pragma mark - 懒加载

- (MKMapView *)mapView {
    
    if (_mapView == nil) {
        MKMapView *mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
        CLLocationCoordinate2D coordinate = {39.9087607478,116.3975780499};
        MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
        MKCoordinateRegion region = MKCoordinateRegionMake(coordinate, span);
        [mapView setRegion:region];
        mapView.delegate = self;
        [self.view addSubview:mapView];
        _mapView = mapView;
    }
    return _mapView;
}

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    CLLocationCoordinate2D coordinate = {39.9087607478,116.3975780499};
    CLLocationCoordinate2D coordinate2 = {39.8087607478,116.3975780499};
    
    // 添加一个标注
    MyAnnotation *annotation = [[MyAnnotation alloc] initWithCoordinate2D:coordinate title:@"北京市" subTitle:@"天安门"];
    MyAnnotation *annotation2 = [[MyAnnotation alloc] initWithCoordinate2D:coordinate2 title:@"不知道" subTitle:@"不知道"];
    
    [self.mapView addAnnotation:annotation];
    [self.mapView addAnnotation:annotation2];
    
    // 计算两个经纬度之间的距离
    // 保存地理信息
    CLLocation *l1 = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
    CLLocation *l2 = [[CLLocation alloc] initWithLatitude:coordinate2.latitude longitude:coordinate2.longitude];
    // 单位是米
    CLLocationDistance distance = [l1 distanceFromLocation:l2];
    NSLog(@"---distance:%f", distance);
}

#pragma mark - MKMapView 代理方法

/**
 *  添加标注的时候会触发
 */
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    
    //    MKPinAnnotationView -> MKAnnotationView -> UIView
    
    NSLog(@"-----%@", views);
}

/**
 *  返回自定义大头针视图 这里面的大头针视图会复用 类似于UITableViewCell的复用机制
 */
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    
    // 从复用队列里面通过标示符找可用的大头针对象 -> MKPinAnnotationView
    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
    if (annotationView == nil) {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"];
        // 显示气泡 (三角视图)
        annotationView.canShowCallout = YES;
        // 添加大头针图片
        annotationView.image = [UIImage imageNamed:@"map"];
        
        // 左右视图
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"AppIcon57x57"]];
        imageView.frame = CGRectMake(0, 0, 40, 40);
        // 当cornerRadius设置为视图的一半 如果这个视图为正方形,则会变为圆形
        imageView.layer.cornerRadius = imageView.frame.size.width * 0.5;
        imageView.layer.masksToBounds = YES;
        annotationView.leftCalloutAccessoryView = imageView;
        
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.backgroundColor = [UIColor lightGrayColor];
        btn.frame = CGRectMake(0, 0, 40, 40);
        [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
        annotationView.rightCalloutAccessoryView = btn;
    }
    return annotationView;
}


- (void)btnAction:(UIButton *)btn {
    
    NSLog(@"%s", __FUNCTION__);
}

// 1. 自定义标注类 遵循MKAnnotation协议

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MyAnnotation : NSObject <MKAnnotation>

/**
 *  构造方法
 */
- (instancetype)initWithCoordinate2D:(CLLocationCoordinate2D)coordinate2D
                               title:(NSString *)title
                            subTitle:(NSString *)subTitle;

@interface MyAnnotation () {
    
    CLLocationCoordinate2D _coordinate2D;
    NSString *_title;
    NSString *_subTitle;
}

@end

@implementation MyAnnotation

#pragma mark - 初始化方法

- (instancetype)initWithCoordinate2D:(CLLocationCoordinate2D)coordinate2D
                               title:(NSString *)title
                            subTitle:(NSString *)subTitle {
    
    self = [super init];
    if (self) {
        _coordinate2D = coordinate2D;
        _title = title;
        _subTitle = subTitle;
    }
    return self;
}

#pragma mark - MKAnnotation

- (CLLocationCoordinate2D)coordinate {
    
    return _coordinate2D;
}

- (NSString *)title {
    
    return _title;
}

- (NSString *)subtitle {
    
    return _subTitle;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值