0

ピンを可視マップに合わせる必要があるため、よく知られているコード行で MKMapRect を取得します。

MKMapRect mapRect = MKMapRectNull;
for(id<MKAnnotation> annotation in [self.mapView annotations]){

    if (![annotation isKindOfClass:[MKUserLocation class]]) {
        MKMapPoint annotationPoint = MKMapPointForCoordinate([annotation coordinate]);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, delta, delta);
        mapRect = MKMapRectUnion(mapRect, pointRect);
    }

}

次に、次のものを取得して設定MKCoordinateRegionします。

 MKCoordinateRegion region = MKCoordinateRegionForMapRect(newMapRect);
    MKCoordinateRegion fitRegion = [self.mapView regionThatFits:region];
 [self.mapView setRegion:fitRegion animated:animated];

私は2つの状態(マップを開くと閉じる)を使用しているため、マップが完全に表示されない場所(origin.yの値が負)を使用しているためself.view、メソッド「fitToAnnotations」が呼び出されたときに四角形を再描画する必要があります。[self.mapView setNeedsLayout];正しいself.mapView.frame(開くか閉じるか) を取得します。

さて、このコードを他のいくつかの行で使用すると、iOS7 ではすべて正常に動作しますが、iOS 7.1 では open-map-Region が異なり、ピンのない大きなエッジ領域が表示され、すべてが中央部分に収まります。

マップが全画面または半分の画面サイズの場合に表示する正しい地域を取得する方法は次のとおりです

MKMapRect newMapRect = mapRect;
if (mapFullScreen) {
    newMapRect = [self.mapView mapRectThatFits:mapRect edgePadding:UIEdgeInsetsMake(200, 15, 30, 15)];
}else{
    MKMapView *smallMap = [[MKMapView alloc] initWithFrame:self.homeViewController.tableView.tableHeaderView.frame];
    newMapRect = [smallMap mapRectThatFits:mapRect edgePadding:UIEdgeInsetsMake(15, 60, 5, 60)];
    smallMap = nil;
}

何が悪いの?

4

1 に答える 1

1

iOS 7.1 でも同じ問題に直面しています。

私のアプリでは、問題はランダムに発生しています。おそらく、いくつかの内部マップ スレッドの実行速度に依存しています。

私にとっての汚いハックは、領域をズームするメソッドの呼び出しの直前にバックグラウンドスレッドに [NSThread sleepForTimeInterval:1.0] を追加することでした(これは、説明されているコードに似ています)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{  
    //(generating annotions array here)   
    //ios 7.1 hack:
    [NSThread sleepForTimeInterval:1.0];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self zoomMapViewToFitAnnotations:self.mapView annotations:[annotationsToAddArray allObjects] animated:YES];
        //(addding the generated annotations here)     
    });
});
于 2014-03-17T17:15:36.223 に答える