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

标签 ios objective-c mapkit mkmapview mkannotationview

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

我有一个正在使用的自定义注释 View ,我想使用 image 属性在 map 上用我自己的图标显示点。我有这个工作正常。但我还想做的是覆盖默认标注 View (触摸注释图标时显示的标题/副标题的气泡)。我希望能够控制标注本身:mapkit 仅提供对左右辅助标注 View 的访问,但无法为标注气泡提供自定义 View ,或将其设为零大小或其他任何内容。

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

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

有什么建议吗?我错过了什么明显的东西吗?

最佳答案

还有一个更简单的解决方案。

创建一个自定义 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...
    }
}

繁荣,工作完成。

关于ios - 如何自定义 MKAnnotationView 的标注气泡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565828/

相关文章:

ios - 转换时间字符串 yyyy-mm-dd HH :mm:ss to NSDate Time HH:mm AM/PM in swift

ios - 无论 Firebase 中有多少 child ,都可以获取信息(Swift)

ios - 如何将 .xib 界面设置为自定义标注 View ?

ios - 视频swift中的图像/文本叠加

ios - FBSDKGraphRequest 实例方法 '-startWithCompletionHandler:' 未找到(返回类型默认为 'id' )

ios - 创建后如何更改IBAction事件类型?

ios - 如何使用重叠的透明 View Controller 重新创建 FaceTime 的导航 View Controller 转换动画?

ios - 如何选择注释标题?

ios - MapKit 沿线标注

iphone - 线程间 'communication' 问题