メソッドオーバーライド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
サブクラスを持っています。centerOffset
iOS シミュレータ バージョン 8.0 でテスト済み。