2011/03/31

UserLocationには障るべからず

MKMapViewにピンを刺して遊んでいると、
刺しすぎたピンを削除したい衝動に駆られる事がある。
それこそちゃぶ台返しのごとく、一気に全部ひっくり返したいほど。

そんなときは、以下のコードが有効だ。


[mapView removeAnnotations:mapView.annotations]; (1)

これでMKMapViewの上から邪魔っけなピンは一掃される。
めでたしメデタシ……ではない。

このときもし、[mapView setShowUserLocation:YES]; (2)を実行済みであった場合、
ちょっと面倒な事が発生したので、備忘録として記載する。

まず、結論から言うと、(1)を実行した場合、現在位置の青点は、以降MKMapView上に表示されない。
消えたものは、もう一度設定してやればいいだろうと、
再度、(2)を実行しても、MKMapViewはヘソを曲げてしまって現在地は表示されなかった。

最初の対処は、mapView.annotationsの中から、userLocationを司るインスタンスを取り出して、再度[mapView addAnnotation:userLocation];で登録し直す方法。
だが、一度削除されたUserLocationはどうやら地図上への再表示がウマく行かないらしい。

ならば、(1)を展開し、以下のコードで実行したところ、
ウマく行った。


for ( id<MKAnnotation> annotation in mapView.annotations ) {
  if ( [annotation isKindOfClass:[MKUserLocation class]] )continue;
  [mapView removeAnnotation:annotation];
}

要はUserLocationは削除しないというだけ。

実際は削除したUserLocationを復活させる方法があるのかもしれないが、
そもそも自分が登録した訳でもないインスタンスを勝手に削除してしまうというのは、
ちょっとイタダケナイので、この方法でとりあえずは納得しておく。

0 件のコメント:

コメントを投稿