地图(有界面 自定义大头针)

原创 2016年05月31日 16:59:20

创建一个继承与NSObject的类
.h中的代码如下: 引入框架 遵循协议 重写协议中的三个属性

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface MyAnnotation : NSObject<MKAnnotation>
//重写协议中的三个属性 coordinate title subtitle
//坐标
@property (nonatomic) CLLocationCoordinate2D coordinate;
//标题
@property (nonatomic, copy) NSString *title;
//子标题
@property (nonatomic, copy) NSString *subtitle;

//自定义大头针的图片
@property (nonatomic, strong) UIImage *image;



@end

接着回到viewController.m 具体操作如下:

#import "ViewController.h"
//引入框架
#import <CoreAudioKit/CoreAudioKit.h>
#import "MyAnnotation.h"
//地图使用的框架是MapKit
/*
 大头针:
 在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的“大头针”。只要一个NSObject类实现MKAnnotation协议就可以作为一个大头针,通常会重写协议中coordinate(标记位置)、title(标题)、subtitle(子标题)三个属性,然后在程序中创建大头针对象并调用addAnnotation:方法添加大头针即可(之所以iOS没有定义一个基类实现这个协议供开发者使用,多数原因应该是MKAnnotation是一个模型对象,对于多数应用模型会稍有不同,例如后面的内容中会给大头针模型对象添加其他属性)。
 */



@interface ViewController ()<CLLocationManagerDelegate, MKMapViewDelegate>
//定位管理器
@property (nonatomic, strong) CLLocationManager *manager;
//显示地图的视图
@property (nonatomic, strong) MKMapView *mapView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self createMapView];
}
#pragma mark-  创建视图
- (void)createMapView{
    self.mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:self.mapView];
    //设置代理
    self.mapView.delegate = self;
    //定位
    self.manager = [[CLLocationManager alloc] init];
    if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
        [self.manager requestAlwaysAuthorization];
    }

    //设置地图的定位追踪
    _mapView.userTrackingMode = MKUserTrackingModeFollow;
    //设置地图的显示类型
    _mapView.mapType = MKMapTypeStandard;

    //添加大头针
    [self addAnnotation];
}
#pragma mark - 添加大头针
- (void)addAnnotation{
    //设置位置
    CLLocationCoordinate2D location1 = CLLocationCoordinate2DMake(29.5, 116);
    CLLocationCoordinate2D location2 = CLLocationCoordinate2DMake(40, 116);
    CLLocationCoordinate2D location3 = CLLocationCoordinate2DMake(20, 110.5);
    MyAnnotation *annotation1 = [[MyAnnotation alloc] init];
    annotation1.coordinate = location1;
    annotation1.title = @"九江";
    annotation1.subtitle = @"呵呵哒";
    annotation1.image = [UIImage imageNamed:@"1.png"];
    [self.mapView addAnnotation:annotation1];

    MyAnnotation *annotation2 = [[MyAnnotation alloc] init];
    annotation2.coordinate = location2;
    annotation2.title = @"北京";
    annotation2.subtitle = @"北京欢迎您";
    [self.mapView addAnnotation:annotation2];

    MyAnnotation *annotation3 = [[MyAnnotation alloc] init];
    annotation3.coordinate = location3;
    annotation3.title = @"呵呵";
    annotation3.subtitle = @"呵呵";
    [self.mapView addAnnotation:annotation3];
}

//显示大头针的时候才会调用
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    //判断是否是当前自定义的大头针类
    if ([annotation isKindOfClass:[MyAnnotation class]]) {
        //先定义一个重用标识
        static NSString *identifier = @"AnnotationOne";
        MKAnnotationView *annotationView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

        if (!annotationView) {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
            //允许用户交互
            annotationView.canShowCallout = YES;
            //设置详情和大头针的头偏移量
            annotationView.calloutOffset = CGPointMake(0, 1);

            //设置详情的左视图
            annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1.png"]];
        }
        //修改大头针视图
        annotationView.annotation = annotation;

        annotationView.image = ((MyAnnotation *)annotation).image;

        return annotationView;
    }
    else{
        return nil;
    }

}

iOS11调用百度地图出现自定义 大头针不显示的问题

适配iOS11的时候,发现百度地图实现大头针的功能出现,自定义的大头针不显示的问题,原因是在继承 BMKAnnotationView 类的时候,实现了drawRect方法-(void)drawRect...
  • wangqiuwei07
  • wangqiuwei07
  • 2017年11月15日 14:36
  • 228

swift地图定位(十三)大头针系统视图

import UIKit import MapKit class ViewController: UIViewController { @IBOutlet weak var mapView...
  • callzjy
  • callzjy
  • 2016年11月15日 02:32
  • 732

iOS地图和定位服务(自定义大头针)

#import "ViewController.h" //使用地图 需导入MapKit #import #import #import "MyAnnotationView.h" ...
  • lcldelevin
  • lcldelevin
  • 2015年10月11日 09:47
  • 1348

百度地图使用-自定义大头针和弹出气泡

// 根据anntation生成对应的View - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id )...
  • yidu_blog
  • yidu_blog
  • 2016年05月09日 15:16
  • 868

MapKit之大头针全面解析(使用系统大头针、自定义大头针callout视图、使用图片显示大头针)

首先了解一些相关知识点: 添加大头针到地图       在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的“大头针”。大头针(Annotations)提供了一种方式来突出地...
  • longshihua
  • longshihua
  • 2016年06月20日 16:27
  • 5816

iOS中的地图大头针的添加

操作地图之前都要在info.plist文件添加: 大头针的添加展示:    1⃣️大头针在地图上的展示:  ①MKAnnotationView 类似c...
  • shu315
  • shu315
  • 2016年04月20日 20:08
  • 1760

iOS 点/长按地图放/ 移除大头针并显示地址

// 首先建立一个类 接受 MKAnnotation>  LHAnnotation.h #import #import @interface LHAnnotation : NSObjec...
  • saw471
  • saw471
  • 2016年02月26日 19:18
  • 887

【iOS】Mapkit的使用:地图显示、定位、大头针、气泡等

以前做项目用高德地图SDK,需要注册账号和AppID,然后下载SDK集成到项目中,比较麻烦,这几天看了下苹果自带的MapKit框架,感觉挺好用,官方文档也介绍得很详细,所以按照官方文档写了个demo,...
  • dolacmeng
  • dolacmeng
  • 2015年06月22日 18:28
  • 13234

百度地图添加多个大头针自定义图片

效果图: 代码: 1.设置两个属性 BMKPointAnnotation* pointAnnotation;    //标注点1 BMKPointAnnotation* animate...
  • qq_18951479
  • qq_18951479
  • 2016年03月21日 16:22
  • 2142

swift地图定位(十四)使用 MKAnnotationView自定义大头针视图

import UIKit import MapKit class ViewController: UIViewController { @IBOutlet weak var mapView...
  • callzjy
  • callzjy
  • 2016年11月15日 03:29
  • 1467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:地图(有界面 自定义大头针)
举报原因:
原因补充:

(最多只允许输入30个字)