2011-07-26 10 views
1

私はiPhoneでMapKitのレイヤーを扱っています。私が出会ったライブラリの1つはhttps://github.com/mtigas/iOS-MapLayerDemo/でした。非常に役に立ち、うまくいくようです。しかし、私はそれをどのように動作するかを理解し、理解しようとしていますが、何か問題があります。MKOverlayViewについての混乱

このページでは、たとえば、https://github.com/mtigas/iOS-MapLayerDemo/blob/master/MapLayerDemo/Classes/CustomOverlayView.m, の4つのカスタム関数が定義されています。私は、これらの機能がMKOverlayViewの通常の機能に追加されていると想定していますか?事実、これらの新しい機能のいずれかが実際にから呼び出された場所を見つけることができないので、このページの仕組みを理解する上で問題があります。プロジェクト内の他のファイルからのものではないようです。

ご協力いただきありがとうございます。

+0

私が見ることのできるところからは呼び出されず、いくつかのログステートメントを入れておくと価値があります。 あなたの便宜のために残しておいた便利な機能ですが、プロジェクトを実行する必要はありません。 – MCannon

+0

返事をありがとう。彼らは実際にプロジェクトから呼び出されていますが、私の人生では私はどこにいるのか分かりません。 –

答えて

3

コメントであなたと一緒にいくつかの拡張の議論の後:MKOverlayViewの

オーバーライド可能な機能、そのコードはMapKit.frameworkのどこかに難読化されているためのようなcanDrawMapRectが簡単に呼び出すコードにさかのぼることができません。

代わりに、典型的なアプローチは、フレームワークがその機能を使用していることの精神的なイメージを得るまで、ドキュメントを再読み込みすることです。 (それは、一般的に眉をひそめていると私はそれをお勧めしませんが、逆コンパイルバイナリのようなものがあります。)

canDrawMapRectドキュメント:MapKitでどこか:http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html#//apple_ref/doc/uid/TP40009715-CH1-SW10

そのドキュメントを読んだ後、私はこれを推測します。実際にビューを描画する前に、canDrawMapRectが呼び出されています。サブクラスでその関数をオーバーライドしなかった場合は、スーパークラスのデフォルトの実装が呼び出され、常にYESを返してからdrawMapRect:を呼び出します(MKOverlayViewをサブクラス化する場合はオーバーライドする必要があります)。

上記のリンク先のクラスは、おそらくNOを返します。その場合、MapKit.frameworkのコードはdrawMapRect:という呼び出しをスキップし、何も表示されない(またはリフレッシュされる)ようです。

このケースでは、短い説明文であるを使用すると、コード探偵を再生し、すべてのコードを見ることができなくても分かりやすい文書が作成されることを願っています。

編集:もっと明確にする - MKOverlayViewは実際に何かを可視にするためにサブクラス化する必要があります。あなたの基本的な質問に取得する前に


私のオリジナルの答え -

短い答え:これらは、そのクラス内での使用のためのプライベート関数です。

長い回答:実装ファイルの先頭の の空の名前カテゴリで宣言された関数は、カテゴリが のクラスにのみ表示されます。したがって、それらの関数は、その クラスの実装内でのみ呼び出すことができます。 (C++の同等機能は、 関数をprivateと宣言するだけです)

3つの関数は、同じ.mファイル内で呼び出されます。 が掘り起こされていないと、私は彼らが最初の機能を書いたと推測してから、後で を使用しないことにしました。

+0

返事をありがとう。まあ、.mファイルに定義されていますが、プロジェクトのどこから実際に呼び出されますか? –

+0

ええ、しかし、これらは関数の定義だけです...まず定義されていない、実際にはどこかで呼び出される必要はありませんか? –

+0

はい、それはどこでも呼び出されない別の関数の中にあります。つまり、canDrawMapRectはどこですか、zoomLevelForZoomScaleを呼び出しますか? –

関連する問題