2

コールアウトを自動的に表示するアノテーションを取得しようとしています。私はなんとかそうすることができました、しかしこれがされるとき、地図は何らかの理由で北極海の真ん中でズームインします。なぜそれが起こるのか誰かが知っていますか?これが私の現在のコードです:

- (void)viewDidLoad
{

    CLLocationCoordinate2D zoomLocation;
    zoomLocation.latitude = 59.*****;
    zoomLocation.longitude = 17.*****;
    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation,  0.5 * METERS_PER_MILE, 0.5 * METERS_PER_MILE);
    MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
    [self.mapView setRegion:adjustedRegion animated:YES];

    self.mapView.delegate = self;

    CLLocationCoordinate2D location = CLLocationCoordinate2DMake(59.*****, 17.*****);
    MapAnnotation *annotaion = [[MapAnnotation alloc] initWithCoordinates:location title:@"*****" subTitle:@"*****"];
    [self.mapView addAnnotation:annotation];
    [super viewDidLoad];
}

- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views
{
    MKAnnotationView *annotationView = [views objectAtIndex:0];
    id <MKAnnotation> mp = [annotationView annotation];
    [mv selectAnnotation:mp animated:YES];
}
4

1 に答える 1

1

showsUserLocationがオンになっている 場合に発生するようです。

マップ ビューがユーザー位置注釈ビューを追加するときに、それを ( にanimated設定してYES) 選択しようとすると、マップが北極にズームします (理由は不明)。

通話中に に設定animatedすると、北極へのズームは回避されますが、注釈の代わりにユーザーの位置注釈が選択される可能性があります。NOselectAnnotation

showsUserLocationオフにするか、 で、ユーザーの場所ではない注釈が見つかるまで配列didAddAnnotationViewsをループします。views

for (MKAnnotationView *av in views) {
    id <MKAnnotation> mp = [av annotation];
    if (![mp isKindOfClass:[MKUserLocation class]])
    {
        [mv selectAnnotation:mp animated:YES];
        break;
    }
}
于 2012-08-09T23:49:40.180 に答える