Pin 表示と compass 表示ではまる
MapKit を使っていて、long tap したところに pin を打つ、せっかくだからカスタマイズしてと、カスタマイズは pinView といいう class を作ってそこでカスタマイズするのですよ、と進めていたところ、ところで、現在地も表示したくなってきたんだけど・・・ということになり、はいはい、それは、.showUserLocation = YES; で OK とここまではよくて、実際現在地を表示させてみると、pinView で指定した内容になっちゃってるのね。
現在地を表示させるときも delegate 通過しているからなんだろううと、では、区別するにはどうするか。
if ( [[annotation class] isEqual:[MKUserLocation class]] )
{
return nil;
}
else
{
こういうの書いたらうまくいった。
苦難はまだまだ続き、compass を表示するにはどうするか。標準では、地図を回転させると compass が表示されるんだけど、初期表示では表示されない。次のようにすると表示された。
self.mapView.showsCompass = NO; // default を非表示
MKCompassButton* compass = [MKCompassButton compassButtonWithMapView:self.mapView];
compass.compassVisibility = MKFeatureVisibilityVisible;
[self.mapView addSubview:compass];
compass.translatesAutoresizingMaskIntoConstraints = false;
[compass.trailingAnchor constraintEqualToAnchor:_mapView.trailingAnchor constant: - 12].active = YES;
[compass.topAnchor constraintEqualToAnchor:_mapView.topAnchor constant: 12].active = YES;
default のは非表示にして、compassButton class を新設し、addSubview する。
単に addSubview しただけだと、左上部に compass が表示され、しかも、上と左が少し欠けて表示される。ので、制約も記載しておくと。
かなりめんどくさいね。