如何自定义MKAnnotationView的标注气泡?

我目前正在使用mapkit,并且卡住了。

我正在使用一个自定义注释视图,并且我想使用image属性使用自己的图标在地图上显示该点。我的工作很好。但是我还想做的是覆盖默认的标注视图(触摸注释图标时标题/副标题出现的气泡)。我希望能够控制标注本身:mapkit仅提供对左侧和右侧辅助标注视图的访问,但是无法为标注气泡提供自定义视图,也不能为其提供零大小,或者其他任何方式。

我的想法是在my中重写selectAnnotation / deselectAnnotation MKMapViewDelegate,然后通过调用自定义注释视图来绘制自己的自定义视图。这有效,但仅当在我的自定义批注视图类中canShowCallout设置为时才有效YES。如果我将此设置为NO,则不会调用这些方法(这是我想要的,因此不会绘制默认的标注气泡)。因此,我无法知道用户是否触摸了地图上的我的点(选中了它)或触摸了一个不属于我的注释视图的点(选中了它)而没有显示默认的标注气泡视图。

我尝试走另一条路,只是自己在地图上处理所有触摸事件,但似乎无法正常工作。我读了其他与在地图视图中捕获触摸事件有关的帖子,但它们并不是我想要的。有没有办法在绘制之前深入地图视图以删除标注气泡?我很茫然。

有什么建议么?我是否缺少明显的东西?


跃然一笑
浏览 906回答 3
3回答

largeQ

有一个更简单的解决方案。创建一个自定义UIView(用于您的标注)。然后创建的子类MKAnnotationView,并重写setSelected如下:- (void)setSelected:(BOOL)selected animated:(BOOL)animated{    [super setSelected:selected animated:animated];    if(selected)    {        //Add your custom view to self...    }    else    {        //Remove your custom view...    }}景气,工作完成了。

慕村9548890

继续@TappCandy出色的简单答案,如果您想以与默认气泡相同的方式为气泡设置动画,则我制作了以下动画方法:- (void)animateIn{       float myBubbleWidth = 247;    float myBubbleHeight = 59;    calloutView.frame = CGRectMake(-myBubbleWidth*0.005+8, -myBubbleHeight*0.01-2, myBubbleWidth*0.01, myBubbleHeight*0.01);    [self addSubview:calloutView];    [UIView animateWithDuration:0.12 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^(void) {        calloutView.frame = CGRectMake(-myBubbleWidth*0.55+8, -myBubbleHeight*1.1-2, myBubbleWidth*1.1, myBubbleHeight*1.1);    } completion:^(BOOL finished) {        [UIView animateWithDuration:0.1 animations:^(void) {            calloutView.frame = CGRectMake(-myBubbleWidth*0.475+8, -myBubbleHeight*0.95-2, myBubbleWidth*0.95, myBubbleHeight*0.95);        } completion:^(BOOL finished) {            [UIView animateWithDuration:0.075 animations:^(void) {                calloutView.frame = CGRectMake(-round(myBubbleWidth/2-8), -myBubbleHeight-2, myBubbleWidth, myBubbleHeight);            }];        }];    }];}它看起来相当复杂,但是只要您将标注气泡的点设计为居中,您就应该可以替换myBubbleWidth并myBubbleHeight以自己的大小工作。并记住确保子视图的autoResizeMask属性设置为63(即“全部”),以便它们在动画中正确缩放。:-乔
打开App,查看更多内容
随时随地看视频慕课网APP