地图的使用和自定义大头针

自定义大头针


#import <Foundation/Foundation.h>

#import <MapKit/MapKit.h>

// 引入MKAnnotation协议,切记不可以忘记


@interface SSAnnotation : NSObject<MKAnnotation>

@property(nonatomic,readonly)CLLocationCoordinate2D coordinate; // 坐标

@property(nonatomic,copy)NSString * title; // 位置名称

@property(nonatomic,copy)NSString * subtitle; // 位置子信息(可选)

- (instancetype)initWithCLLocation:(CLLocationCoordinate2D) coordinate;


@end




#import "SSAnnotation.h"


@implementation SSAnnotation

- (instancetype)initWithCLLocation:(CLLocationCoordinate2D)coordinate

{

    if (self = [super init]) {

        _coordinate = coordinate;

    }

    return self;

}

@end


地图展示

#import <UIKit/UIKit.h>

#import <MapKit/MapKit.h>

// 引用地图协议


@interface MainViewController : UIViewController<MKMapViewDelegate>


@end


#import "MainViewController.h"

#import "SSAnnotation.h"


@interface MainViewController ()

@property(nonatomic,strong)MKMapView * mapView;

@end


@implementation MainViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        // Custom initialization

    }

    return self;

}


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.navigationItem.title = @"地图标注";

    self.mapView = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    // 是否显示用户当前位置

    self.mapView.showsUserLocation = YES;

    // 设置代理

    self.mapView.delegate = self;

    

    // 地图显示类型

    /**

     *    MKMapTypeStandard  // 标准地图

     *    MKMapTypeHybrid    // 混合地图

     *    MKMapTypeSatellite // 卫星地图

     */

    self.mapView.mapType = MKMapTypeStandard;

    // 经纬度

    CLLocationCoordinate2D coord2D = {39.910650,116.47030};

    // 显示范围,数值越大,范围就越大

    MKCoordinateSpan span = {0.1,0.1};

    // 显示区域

    MKCoordinateRegion region = {coord2D,span};

    // 给地图设置显示区域

    [self.mapView setRegion:region animated:YES];

    // 是否允许缩放

    //self.mapView.zoomEnabled = NO;

    // 是否允许滚动

    //self.mapView.scrollEnabled = NO;

    

    // 初始化自定义Annotation(可以设置多个)

    SSAnnotation * annotation = [[SSAnnotation alloc] initWithCLLocation:coord2D];

    // 设置标题

    annotation.title = @"自定义标注位置";

    // 设置子标题

    annotation.subtitle = @"子标题";

    // 将标注添加到地图上(执行这步,就会执行下面的代理方法viewForAnnotation

    [self.mapView addAnnotation:annotation];

    [self.view addSubview:_mapView];

}


// 返回标注视图(大头针视图)

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation

{

    /**

     *  是不是有点像自定义UITableViewCell一样

     */

    static NSString * identifier = @"annotation";

    // 复用标注视图(MKpinAnnotationView是大头针视图,继承自MKAnnotation

    MKPinAnnotationView * annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

    if (annotationView == nil) {

        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];

    }

    // 判断是否为自定义的标注视图

    if ([annotation isKindOfClass:[SSAnnotation class]]) {

        // 设置大头针颜色

        annotationView.pinColor = MKPinAnnotationColorGreen;

        // 点击大头针是否显示上面设置好的标题视图

        annotationView.canShowCallout = YES;

        // 要自定义描点图片,可以考虑使用MKAnnotationView;

        // MKPinAnnotationView只能是以大头针形式显示!

        annotationView.image = [UIImage imageNamed:@"CustomImage"];

        // 添加标题视图右边视图

        UIButton * button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

        [button addTarget:self action:@selector(didClickAnnotationViewRightButtonAction:) forControlEvents:UIControlEventTouchDragInside];

        annotationView.rightCalloutAccessoryView = button;

        // 是否以动画的形式显示标注(从天而降)

        annotationView.animatesDrop = YES;

        annotationView.annotation = annotation;

        // 返回自定义的标注视图

        return annotationView;

        

    }else{

        // 当前设备位置的标注视图,返回nil,当前位置会创建一个默认的标注视图

        return nil;

    }

    

}

- (void)didClickAnnotationViewRightButtonAction:(UIButton *)button

{

    NSLog(@"%s",__FUNCTION__);

}

// 更新当前位置调用

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

{

    NSLog(@"%s",__FUNCTION__);

    

}

// 选中标注视图

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view

{

    NSLog(@"%s",__FUNCTION__);

}

// 地图的现实区域改变调用

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated

{

    NSLog(@"%s",__FUNCTION__);

    

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值