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 が表示され、しかも、上と左が少し欠けて表示される。ので、制約も記載しておくと。

かなりめんどくさいね。