0

メソッドオーバーライドMKPolygonsを使用しているものがいくつかあります。rendererForOverlayこのような各ポリゴン内に、注釈ビューを表示する必要があります。

注釈ビューの位置がかなり不正確であることがわかりました。MKPolygon に完全にズームした場合にのみ、その MKPolygon の中心に注釈ビューが表示されます。

MKAnnotationView派生クラス インスタンスの中心を設定しようとしましたが、役に立ちませんでした。

centerOffset プロパティで遊んでみましたが、役に立ちませんでした。全体を MKPolygon の中心に配置するために、どの値を渡すことができるかわかりません。

iOSなどに組み込まれていない独自のMKAnnotationView派生サブクラスを使用していMKPinAnnotationViewます。これが私のviewforAnnotation実装です。

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        //show default blue dot for user location...
        return nil;
    }

    static NSString *reuseId = @"MapAnnotationID";

    MWAnnotationView *av = (MWAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];

    if (av == nil)
    {
        av = [[MWAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
        av.canShowCallout = NO;

        //note that this my custom UIView derived class to show UI.
        MWMapAnnotationView * mapAnnView = [[[NSBundle mainBundle] loadNibNamed:@"MapAnnotationView" owner:nil options:nil] firstObject];

        mapAnnView.tag = TAG_ANNOTATION;

        [av addSubview:mapAnnView];
        av.centerOffset = CGPointMake(0, -15);
    }
    else
    {
        av.annotation = annotation;
    }

    if (map.region.span.longitudeDelta > MAX_LONGITUDEDELTA / 4)
    {
        av.hidden = YES;
    }
    else
    {
        av.hidden = NO;
    }

    //custom UI elements of my subview
    mapAnnView.labelCapital.text = capital;
    mapAnnView.labelPopulation.text = population;

    if (imageName)
    {
        mapAnnView.imageAnnotation.image = [UIImage imageNamed:imageName];
    }
    else
    {
        mapAnnView.imageAnnotation.image = nil;
    }    

    return av;
}

アップデート:

centerOffset を設定しても効果がないことがわかりました。内部のさまざまなポイントに設定しようとしましviewForAnnotationたが、役に立ちませんでした。不思議に思っている人のために、私はセッターをオーバーライドした独自のMKAnnotationViewサブクラスを持っています。centerOffsetiOS シミュレータ バージョン 8.0 でテスト済み。

4

0 に答える 0