关于MKOverlayView的困惑

时间:2011-07-26 18:37:39

标签: iphone objective-c xcode mapkit mkoverlay

我一直在使用iPhone上的MapKit图层,我遇到的一个图书馆就是这个:https://github.com/mtigas/iOS-MapLayerDemo/。它非常有用,似乎工作正常。但是,我试图通过并了解它是如何工作的,但我遇到了一些麻烦。

在此页面上,例如:https://github.com/mtigas/iOS-MapLayerDemo/blob/master/MapLayerDemo/Classes/CustomOverlayView.m, 在顶部,定义了4个自定义函数。我假设这些功能正在增加MKOverlayView的正常功能?问题是,我找不到任何这些新功能实际上是调用的,因此我在理解这个页面如何工作时遇到了一些麻烦。它似乎不是来自项目中的任何其他文件。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

在评论中与您进行了一些长时间的讨论后:

MKOverlayView的覆盖功能(例如canDrawMapRect)无法轻易追溯到其调用代码,因为该代码在MapKit.framework中的某处被混淆。

相反,典型的方法是重新阅读他们的文档,直到您了解框架使用该函数的内容。 (有反编译二进制文件这样的东西,虽然这通常是不赞成的,我不推荐它。)

canDrawMapRect文档:http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html#//apple_ref/doc/uid/TP40009715-CH1-SW10

在阅读完他们的文档之后,我推断了这一点:在MapKit.framework的某处,在实际绘制视图之前调用了canDrawMapRect。如果你没有在你的子类中覆盖该函数,它会调用超类的默认实现,它总是返回YES,然后调用drawMapRect:(如果你是MKOverlayView的子类,必须覆盖它,否则什么都不会绘制! )

您上面链接的课程可能会返回NO。在这种特殊情况下,MapKit.framework中的代码似乎跳过调用drawMapRect:并且没有显示(或刷新)任何内容。

所以,长话短说:对于这种情况,你必须扮演代码​​侦探并希望文档写得足够清楚,无法看到所有代码。< / p>

编辑:只是为了进一步澄清 - 看来MKOverlayView必须被子类化以实际生成可见的内容。


我在回答您的基本问题之前的原始答案 -

  

简短回答:这些是在该类中使用的私有函数。

     

答案很长:在顶部的空名称类别中声明的函数   实现文件只对类别的类可见   延伸。因此,这些功能只能在其中调用   班级的实施。 (C ++等价物只是声明了   功能私人)

     

在同一个.m文件中调用这4个函数中的3个。没有   挖掘,我猜他们写了第一个函数,然后   后来决定不使用它。