0

マップビュー内に複数の注釈を表示し、このすべての注釈を表示するにはズームする必要があります。私はその前にコードを持っています

MKMapRect zoomRect = MKMapRectNull;

int i = 0;
for (Post *post in _allPostsToList) {
    if (((post.location2D.latitude == 0.0f)&&(post.location2D.longitude == 0.0f))||(!CLLocationCoordinate2DIsValid(post.location2D))) {
        i++;
        continue;
    }
    MyAnnotation *annotation = [[MyAnnotation alloc] initWithpost:post];
    annotation.tag = i++;
    [mapView addAnnotation:annotation];

    MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
    MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
    zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
}
[mapView setVisibleMapRect:zoomRect animated:YES];

正常に動作しますが、これにはもう1つ必要です。マップの中央に、上記のすべての注釈を表示するユーザーの場所の青いバブルが必要です。これを行う方法。私はこれを試しました

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
        MKMapRect zoomRect = mapView.visibleMapRect;
        MKMapPoint annotationPoint = MKMapPointForCoordinate(newLocation.coordinate);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
        zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
        [mapView setVisibleMapRect:zoomRect animated:YES];
        [manager stopUpdatingLocation];

   }

その動作しますが、ユーザーの場所を中央に配置しませんこれをダウする方法。誰でもこの問題を解決できますか

4

2 に答える 2

1

現在表示されているRect(zoomRect)を取得し、それdidUpdateToLocationがnullでない場合は、pointRectで結合し、それにズーム/パンします。それはどのようにしてpointRectに集中するのでしょうか?それは、2つがまったく同じ中心を持っている場合にのみ発生します。

ユーザーロケーションの中心に配置したいが、すべてのポイントを表示したい場合は、ユーザーロケーションからポイントの最大距離を取得し、一致する中心とスパンを持つマップレクを作成できます。ただし、ポイントがすべて一方向にずれていて、ユーザーの場所が画面の中央にある場合、画面の反対側は無駄になります。

于 2013-01-22T00:23:30.210 に答える
0

ただの賭け。mapViewのリージョンにアクセスして、新しいセンターを設定してみてはどうでしょうか。

MKCoordinateRegion region = mapView.region;
region.center = newLocation.coordinates;
[mapView setRegion:region animated:YES];
于 2013-01-21T22:55:20.370 に答える