1

これは私の最初の投稿であり、確かに頭がいっぱいですが、助けが必要です。

Apple の KMLViewer の例をダウンロードして、マップのオーバーレイを確認しました。それを機能させた後、「調査」の一環として、次の行を追加しました

map = [[MKMapView alloc] initWithFrame:self.view.frame];

行の直後

[super viewDidLoad];

私も持っていなかったことは知っていますが、プログラムで MKMapView を作成する必要がある別のプロジェクトがあり、より単純な作業プログラムでアプローチを検証したいと考えていました。

その結果、KMLViewer はエラーなしでコンパイルおよび実行されましたが、kml ファイルによって作成されたオーバーレイは表示されなくなりました。行が削除された場合、オーバーレイが再び表示されました。

私は何が欠けていますか?

助けてくれてありがとう。

4

1 に答える 1

1

KMLViewer の map 変数は IBOutlet として宣言され、xib の MKMapView に接続されます。再作成することにより、新しいインスタンスは xib のインスタンスに接続されなくなります。

次の理由により、オーバーレイが表示されない可能性があります。

  • 新しいインスタンスのデリゲートは設定されていません (そのため、viewForOverlay などは呼び出されません)
  • 新しいマップはサブビューとして追加されません

したがって、alloc+init の後に次の 2 行を追加すると、再び機能し始めるはずです。

map.delegate = self;
[self.view addSubview:map];

ただし、xib の MKMapView は、新しいマップ インスタンスの下に引き続き存在します。

于 2011-05-10T00:20:38.660 に答える