高德地图关闭气泡高德android,多信息弹窗/气泡效果

使用场景

自定义AnnotationView实现多个气泡弹窗效果。

当用户需要在地图上显示多个气泡弹窗效果时,利用该功能可以实现。

用到产品

核心类/接口

类接口说明版本

AMapSearchAPI- (void)AMapPOIKeywordsSearch:(AMapPOIKeywordsSearchRequest *)request;;POI 关键字查询接口V4.0.0版本起

MAInfowindowView---继承自MAAnnotationView,实现了弹出框样式的自定义annotationView。---

核心难点

自定义绘制弹出框效果AnnotaitonView

- (void)drawRect:(CGRect)rect

{

[self drawInContext:UIGraphicsGetCurrentContext()];

self.layer.shadowColor = [[UIColor grayColor] CGColor];

self.layer.shadowOpacity = 1.0;

self.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);

}

- (void)drawInContext:(CGContextRef)context

{

CGContextSetLineWidth(context, 1.0);

CGContextSetFillColorWithColor(context, kBackgroundColor.CGColor);

[self getDrawPath:context];

CGContextFillPath(context);

}

- (void)getDrawPath:(CGContextRef)context

{

CGRect rrect = self.bounds;

CGFloat radius = 6.0;

CGFloat minx = CGRectGetMinX(rrect),

midx = CGRectGetMidX(rrect),

maxx = CGRectGetMaxX(rrect);

CGFloat miny = CGRectGetMinY(rrect),

maxy = CGRectGetMaxY(rrect)-kArrorHeight;

CGContextMoveToPoint(context, midx+kArrorHeight, maxy);

CGContextAddLineToPoint(context,midx, maxy+kArrorHeight);

CGContextAddLineToPoint(context,midx-kArrorHeight, maxy);

CGContextAddArcToPoint(context, minx, maxy, minx, miny, radius);

CGContextAddArcToPoint(context, minx, minx, maxx, miny, radius);

CGContextAddArcToPoint(context, maxx, miny, maxx, maxx, radius);

CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);

CGContextClosePath(context);

}

/* 自定义绘制弹出框效果annotaitonView. */

override func draw(_ rect: CGRect) {

self.draw(context: UIGraphicsGetCurrentContext()!)

self.layer.shadowColor = UIColor.gray.cgColor

self.layer.shadowOpacity = 1.0

self.layer.shadowOffset = CGSize(width: CGFloat(0.0), height: CGFloat(0.0))

}

func draw(context: CGContext) {

context.setLineWidth(CGFloat(1.0))

context.setFillColor(kBackgroundColor.cgColor)

self.getDrawPath(context:context)

context.fillPath()

}

func getDrawPath(context: CGContext) {

let rrect: CGRect = self.bounds

let radius: CGFloat = 6.0

let minx: CGFloat = rrect.minX

let midx: CGFloat = rrect.midX

let maxx: CGFloat = rrect.maxX

let miny: CGFloat = rrect.minY

let maxy: CGFloat = rrect.maxY - kArrorHeight

context.move(to: CGPoint(x: CGFloat(midx + kArrorHeight), y: maxy))

context.addLine(to: CGPoint(x: midx, y: CGFloat(maxy + kArrorHeight)))

context.addLine(to: CGPoint(x: CGFloat(midx - kArrorHeight), y: maxy))

context.addArc(tangent1End: CGPoint(x: minx, y: maxy), tangent2End: CGPoint(x: minx, y: miny), radius: radius)

context.addArc(tangent1End: CGPoint(x: minx, y: minx), tangent2End: CGPoint(x: maxx, y: miny), radius: radius)

context.addArc(tangent1End: CGPoint(x: maxx, y: miny), tangent2End: CGPoint(x: maxx, y: maxx), radius: radius)

context.addArc(tangent1End: CGPoint(x: maxx, y: maxy), tangent2End: CGPoint(x: midx, y: maxy), radius: radius)

context.closePath()

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值