Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 关于MkoveryView的困惑_Iphone_Objective C_Xcode_Mapkit_Mkoverlay - Fatal编程技术网

Iphone 关于MkoveryView的困惑

Iphone 关于MkoveryView的困惑,iphone,objective-c,xcode,mapkit,mkoverlay,Iphone,Objective C,Xcode,Mapkit,Mkoverlay,我一直在为iPhone上的MapKit使用图层,我遇到的一个库是:。这很有帮助,而且似乎效果很好。然而,我正试图了解它是如何工作的,但我遇到了一些麻烦 在本页上,例如:, 在顶部,定义了4个自定义函数。我假设这些函数是在MKOVERYVIEW的正常功能的基础上添加的?问题是,我找不到这些新函数实际上是从哪里调用的,因此我很难理解这个页面是如何工作的。它似乎不是来自项目中的任何其他文件 非常感谢您的帮助,谢谢。在评论中与您进行了长时间的讨论后: MKOverlayView的可重写函数,例如canD

我一直在为iPhone上的MapKit使用图层,我遇到的一个库是:。这很有帮助,而且似乎效果很好。然而,我正试图了解它是如何工作的,但我遇到了一些麻烦

在本页上,例如:, 在顶部,定义了4个自定义函数。我假设这些函数是在MKOVERYVIEW的正常功能的基础上添加的?问题是,我找不到这些新函数实际上是从哪里调用的,因此我很难理解这个页面是如何工作的。它似乎不是来自项目中的任何其他文件


非常感谢您的帮助,谢谢。

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

MKOverlayView的可重写函数,例如
canDrawMapRect
,很难追溯到它们的调用代码,因为该代码在MapKit.framework中的某个地方被混淆了

相反,典型的方法是重新阅读他们的文档,直到您在脑海中了解到框架使用函数的目的。(有反编译二进制文件这样的事情,尽管人们通常不赞成这样做,我也不推荐这样做。)

canDrawMapRect
文档:

在阅读了他们的文档之后,我推断:在MapKit.framework中的某个地方,
canDrawMapRect
在实际绘制视图之前被调用。如果您没有在子类中重写该函数,它将调用超类的默认实现,该实现总是返回YES,然后调用
drawMapRect:
(如果您正在子类化MKOverlayView,则必须重写该函数,否则不会绘制任何内容!)

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

因此,长话短说:对于这种情况,您必须扮演代码侦探,并希望文档写得足够清楚,能够在看不到所有代码的情况下找到答案

编辑:只是为了进一步澄清-看来MKOVERYVIEW必须是子类,才能真正生成可见的内容


在讨论你的基本问题之前,我的原始答案--

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

长答案:在顶部的空名称类别中声明的函数 实现文件的类型仅对类别可见 延伸。因此,这些函数只能在该范围内调用 类的实现。(C++等价物只是声明 职能(私人)

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


在浏览了整个项目之后,它们并没有从我能看到的任何地方被调用,也许值得放一些日志语句来看看它们是否被调用?这可能只是因为它们是为方便您而保留的有用功能,但是项目运行不需要它们。谢谢您的回复。他们确实是从项目中打电话来的,但我不知道在哪里。谢谢你的回复。它们是在.m文件中定义的,但它们实际上是从项目的哪个位置调用的?是的,但这些只是函数的定义。。。第一个函数不是必须在某个地方被调用,而不仅仅是被定义吗?是的,但它在另一个函数中,而不是在任何地方被调用。换句话说,canDrawMapRect在哪里,它调用zoomLevelForZoomScale?我相信这些是从框架内部调用的,以响应显示重画事件等。CustomOverlayView的canDrawMapRect正在覆盖MKOverlayView的功能。有关重写这些函数的作用的更多信息,请参阅。谢谢--我已经阅读了该页,而MKOverlayView.h似乎连这些函数都没有,所以这让我很困惑。