zoukankan      html  css  js  c++  java
  • iOS 地图中自定义大头针

    1.继承MKAnnotationView.

    HYAnnotationView.h文件:

    + (instancetype)annotationViewWithMapView:(MKMapView *)mapView;

    HYAnnotationView.m文件:

     

    #import "HYAnnotation.h"//导入大头针model的头文件

    @interface HYAnnotationView()

    @property (nonatomic, weak) UIImageView *iconView;

    @end

    @implementation HYAnnotationView

     + (instancetype)annotationViewWithMapView:(MKMapView *)mapView

    {

        static NSString *ID = @"anno";

        HYAnnotationView *annotationView = (HYAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];

        if (annotationView == nil) {

            // 传入循环利用标识来创建大头针控件

            annotationView = [[HMAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:ID];

           

        }

        return annotationView;

    }

     - (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier

    {

        if (self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]) {

            // 显示标题和子标题 当自定义大头针的时候,如果需要显示标题和子标题,必须写这句话

           self.canShowCallout = YES;       

         在这里面开始自定义大头针,可以随便创建个view

        [self setsubview];

        }

        return self;

    }

    //自定义大头针

    -(void)setsubview{

        self.bounds = CGRectMake(0.f, 0.f, kWidth, kHeight);

        UILabel *nameLab =[[UILabel alloc]init];

        nameLab.width = 40;

        nameLab.height = 30;

        nameLab.y = 0;

        nameLab.x = (self.width - nameLab.width) * 0.5;

        nameLab.font =IWTextFont16;

        nameLab.backgroundColor =IWTextColorRed;

        nameLab.textColor =[UIColor whiteColor];

        nameLab.layer.cornerRadius = 8.0;

        nameLab.layer.borderWidth = 1.0;

        nameLab.layer.borderColor =[UIColor clearColor].CGColor;

        nameLab.clipsToBounds = TRUE;//去除边界

        nameLab.textAlignment =NSTextAlignmentCenter;

        [self addSubview:nameLab];

        self.nameLab =nameLab;

    }

    //设置大头针上的属性

    - (void)setAnnotation:(HMAnnotation *)annotation

    {

        [super setAnnotation:annotation];

    }

    //点击大头针的时候,在大头针上加一个自定义的View(如果想放tableview可以把tableview放在这个view里面)

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated

    {

        if (self.selected == selected)  return;

        if (selected)

        {

            if (self.calloutView == nil)  //self.calloutView是自定义view的属性

            {

                self.calloutView = [[ZLCustomCalloutView alloc] initWithFrame:CGRectMake(0, 0, kCalloutWidth, kCalloutHeight)];

                self.calloutView.centerX =self.width/2.f+ + self.calloutOffset.x;

    //            self.calloutView.center = CGPointMake(CGRectGetWidth(self.bounds) / 2.f + self.calloutOffset.x,

    //                                                -CGRectGetHeight(self.calloutView.bounds) / 2.f + self.calloutOffset.y) ;

            }

                  [self addSubview:self.calloutView];

        }

        else

        {

            [self.calloutView removeFromSuperview];

        }

        

        [super setSelected:selected animated:animated];

    }

    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

    {

        BOOL inside = [super pointInside:point withEvent:event];

       if (!inside && self.selected)

        {

            inside = [self.calloutView pointInside:[self convertPoint:point toView:self.calloutView] withEvent:event];

        }

        return inside;

    }

     在用的时候:

    #pragma mark - MKMapViewDelegate

    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(HYAnnotation *)annotation

    {

        // 返回nil就会按照系统的默认做法

        if (![annotation isKindOfClass:[HYAnnotation class]]) return nil;

        // 1.获得大头针控件

        HYAnnotationView *annoView = [HYAnnotationView annotationViewWithMapView:mapView];

         // 2.传递模型

        annoView.annotation = annotation;

         return annoView;

    }

  • 相关阅读:
    Microsoft .NET Framework 远程执行代码漏洞
    GE PACSystems RX3i 输入验证漏洞
    Windows10 1809版本Windows自动更新服务无法禁用问题解决方案
    企业网络防范Serv-U的漏洞
    jsp安全问题及其解决建议
    Windows XP系统搜索故障及处理办法点点通
    开启路由器的TCP拦截
    从MyIE2平滑升级到Maxthon的完美方案
    全面解析UNIX缓冲区溢出 深度防御体系
    从异常系统进程检查企业网络安全 (二)
  • 原文地址:https://www.cnblogs.com/hongyan1314/p/5802533.html
Copyright © 2011-2022 走看看