MKMapViewでは、Mapに追加されたAnnotationを表示する際に、delegateのviewForAnnotationが呼び出されます。通常はここで対応するviewを生成し、calloutの設定も行うのですが、MKUserLocationではnilを返すことで標準のMKUserLocationViewが生成される仕組みになっています。
そこで、MKUserLocationViewを自分で生成しようと思ったのですが、どうやらこのクラスは非公開のようです。とはいえ、実際にviewが生成されるのはこの関数の呼び戻し後なので、viewの設定を書き換えることはできません。
そこで、このviewを返すタイミングでMKUserLocationのタイトルをnilに設定してみました。予想通りMKUserLocationViewはtitle属性をチェックしてcalloutの表示、非表示を決めているようで、タップに応答しなくなりました。
- (MKAnnotationView *) mapView:(MKMapView *)targetMapView viewForAnnotation:(id) annotation { if([annotation isKindOfClass:[MKUserLocation class]]){ ((MKUserLocation *)annotation).title = nil; } return nil; }
0 件のコメント:
コメントを投稿