美文网首页iOS 深度好文
地图高级 - 自定义大头针

地图高级 - 自定义大头针

作者: 翻这个墙 | 来源:发表于2017-11-23 10:34 被阅读76次

地图高级 - 自定义大头针


自定义大头针.png

1. 理论支撑

按照MVC的原则
    1. 每当添加一个大头针数据模型时, 地图就会调用对应的代理方法, 查找对应的大头针视图,显示在地图上;
    2. 如果该方法没有实现, 或者返回nil, 那么就会使用系统默认的大头针视图

2. 模拟实现系统大头针

  1. 实现当添加大头针数据模型时,地图回调的代理方法

    -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(XXXAnnotation *)annotation
    {
    
    }
    
  2. 实现须知

     1. 大头针系统对应的视图是 MKPinAnnotationView,它继承自 MKAnnotationView
     2. 地图上的大头针视图,和tableview上的cell一样,都使用“循环利用”的机制
    
  3. 实现代码

    // 定义缓存标识
    static NSString *pinID = @"pinID";
    
    // 缓存中取大头针
    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinID];
    
    // 缓存中不存在大头针,则创建
    if (!pinView) {
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:pinID];
    }
    
    // 设置模型数据
    pinView.annotation = annotation;
    
    // 弹出标注
    pinView.canShowCallout = YES;
    
    // 修改大头针颜色
    pinView.pinColor = MKPinAnnotationColorPurple;
    
    // 设置大头针从天而降
    pinView.animatesDrop = YES;
    
    // 设置大头针可以被拖拽(父类中的属性)
    pinView.draggable = YES;
    
    return pinView;
    

3. 自定义大头针

  1. 实现当添加大头针数据模型时,地图回调的代理方法

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(XXXAnnotation *)annotation
{

}
```
  1. 实现须知

     1. 如果想要自定义大头针, 必须使用 MKAnnotationView 或者 自定义的子类
     2. 但是不能直接使用系统默认的大头针, 会无效
    
  2. 实现代码

        // 自定义大头针
        static NSString *pinID = @"pinID";
        MKAnnotationView *customPinView = [mapView dequeueReusableAnnotationViewWithIdentifier:pinID];
        if (!customPinView) {
            customPinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinID];
        }

        // 设置大头针图片
            customPinView.image = [UIImage imageNamed:@"category_3"];

        // 设置大头针可以弹出标注
            customPinView.canShowCallout = YES;

        // 设置标注左侧视图
            UIImageView *leftIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
            leftIV.image = [UIImage imageNamed:@"huba.jpeg"];
            customPinView.leftCalloutAccessoryView = leftIV;

        // 设置标注右侧视图
            UIImageView *rightIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
            rightIV.image = [UIImage imageNamed:@"eason.jpg"];
            customPinView.rightCalloutAccessoryView = rightIV;

        // 设置标注详情视图(iOS9.0)
            customPinView.detailCalloutAccessoryView = [[UISwitch alloc] init];

        return customPinView;

4. 代理方法补充

  1. 选中一个大头针时调用

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
NSLog(@"选中%@", [view.annotation title]);
}
```

  1. 取消选中大头针时调用

    -(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
        {
            NSLog(@"取消选中%@", [view.annotation title]);
        }
    

5. 其他方法补充

  1. 添加导航条上的用户追踪按钮
    navigationItem.leftBarButtonItem = MKUserTrackingBarButtonItem(mapView: mapView)
    

6. 测试环境

    1. 加载地图数据需要联网
    2. XCode版本不限
    3. iOS系统版本不限

7. 常见问题总结

    1. 代码运行在低版本的XCode上, 编译失败
        第一: 语法错误; XCode7.0 对于OC语法优化了一些, 需要手动调整
        第二: iOS9.0的SDK, 在XCode7.0之前的版本没有对应的API

相关文章

  • 地图高级 - 自定义大头针

    地图高级 - 自定义大头针 1. 理论支撑 2. 模拟实现系统大头针 实现当添加大头针数据模型时,地图回调的代理方...

  • 地图高级- 大头针基本使用

    地图高级- 大头针基本使用 1. 大头针 现实生活中的大头针(左图)大头针1.png 地图上的大头针(右图)钉在某...

  • iOS 系统自带API地图开发相关(二)

    地图-自定义大头针 关于大头针视图分两类: MKPinAnnotationView : apple自带的大头针,可...

  • 高德地图---iOS笔记摘录

    概念 使用 地图显示 交互 显示 计算 其他 1.1 大头针 自定义大头针: MAPointAnnotation ...

  • iOS-MapKit文集目录

    前言 MapKit框架的导入 地图展示地图的基本使用-地图显示地图的中级使用-用户追踪地图高级-大头针基本使用地图...

  • 自定义高德地图大头针气泡

    当高德地图自带的大头针气泡不能满足项目需求时,需要开发者自定义地图大头针气泡。比如气泡上显示个图片,标题或者其他之...

  • 高德地图缩小地图大头针位置不对

    使用高德地图时自定义大头针,缩小地图时大头针位置跟实际位置偏移严重 原因:没设置中心点偏移 解决方法:设置中心点偏移

  • 大头针Annotation

    自定义大头针 使用大头针 点击添加大头针 自定义大头针颜色和动画 系统大头针的处理 自定义大头针图片 修改大头针模...

  • iOS 自定义大头针

    一、自定义大头针 需求 需求:鼠标拖拽是在地图的哪个位置, 就在对应的位置加一个大头针,并反地理编码大头针所在城市...

  • 子视图超出父视图响应事件的方法

    留坑,明早更新。 问题出现: 我在地图大头针的时候发现,自定义大头针的callout视图实际上是在父视图annot...

网友评论

    本文标题:地图高级 - 自定义大头针

    本文链接:https://www.haomeiwen.com/subject/ndaavxtx.html