如何自定义MKAnnotationView的调出泡泡?
我目前正在使用mapkit,并被卡住了。
我有我正在使用的自定义注释视图,并且我想使用图像属性来使用我自己的图标显示地图上的点。 我有这个工作正常。 但是我也想要做的是覆盖默认的标注视图(当标注图标被触摸时显示的标题/副标题)。 我希望能够自己控制标注:mapkit只提供对左侧和右侧辅助标注视图的访问,但无法为标注泡泡提供自定义视图,或者为其提供零尺寸或其他任何内容。
我的想法是覆盖我的MKMapViewDelegate
selectAnnotation / deselectAnnotation,然后通过调用我的自定义注释视图来绘制自己的自定义视图。 这是canShowCallout
,但只有当我的自定义注释视图类中的canShowCallout
设置为YES
时才canShowCallout
。 这些方法不会被调用,如果我把这个设置为NO
(这是我想要的,所以默认的标注泡泡没有绘制)。 所以我无法知道用户在地图上是否触及了我的观点(选中它),或者触摸了一个不属于我的注释视图的部分(取而代之),而没有显示默认的标注泡泡视图。
我尝试着走另一条路,只是自己在地图上处理所有触摸事件,而我似乎无法完成这项工作。 我在地图视图中阅读了与捕捉触摸事件相关的其他帖子,但它们不完全是我想要的。 有没有办法在绘图之前挖掘地图视图以移除标注泡泡? 我很茫然。
有什么建议么? 我错过了明显的东西吗?
有一个更简单的解决方案。
创建一个自定义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...
}
}
繁荣,工作完成。
detailCalloutAccessoryView
在过去的日子里,这是一个痛苦,但苹果已经解决了它,只需检查MKAnnotationView上的文档
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
view.canShowCallout = true
view.detailCalloutAccessoryView = UIImageView(image: UIImage(named: "zebra"))
真的,就是这样。 接受任何UIView。
继续从@ 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(即“全部”),以便它们在动画中正确缩放。
:-Joe
链接地址: http://www.djcxy.com/p/67267.html上一篇: How to customize the callout bubble for MKAnnotationView?