iOS:いくつかのマーカーのマップを拡大してiOS7では動作しません

StackOverflow https://stackoverflow.com/questions/19823934

  •  04-07-2022
  •  | 
  •  

質問

私のアプリでは、このコードを使用して、マーカーが配置されているマップにズームインしています。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {

    count++;

    if (count == arrayResults.count){

        MKMapRect zoomRect = MKMapRectNull;
        for (id <MKAnnotation> annotation in mapView.annotations)
        {
            MKMapPoint annotationP = MKMapPointForCoordinate(annotation.coordinate);
            MKMapRect pointRect = MKMapRectMake(annotationP.x, annotationP.y, 0.1, 0.1);
            if (MKMapRectIsNull(zoomRect)) {
                zoomRect = pointRect;
            } else {
                zoomRect = MKMapRectUnion(zoomRect, pointRect);
            }
        }
        [mapView setVisibleMapRect:zoomRect animated:YES];
    }

}

これはiOS 6で正常に機能しますが、iOS 7ではそうではありませんが、その理由はわかりますか?ありがとう

役に立ちましたか?

解決

このコードは、非常に具体的なデリゲートの呼び出しシーケンスに依存しています。

count++ それが想定することを意味します didAddAnnotationViews 委任方法は、各注釈が追加された後、すぐに別々に呼び出されます。

これは、iOSバージョンに関係なく安全でない仮定です。

このズームコードは注釈に依存していないためです ビュー ズームを行うには(注釈が必要です モデル - すなわち。 id<MKAnnotation> オブジェクト)、入る必要はありません didAddAnnotationViews そもそも。

ズームコードを置くだけです(内部のパーツ if ブロック)、アノテーションを追加するコードの直後(おそらく for 通過するループ arrayResults)。それは任意のiOSバージョンで動作するはずです。


また、iOS 7では、新しいものに注意してください showAnnotations:アニメーション: 方法により、このマニュアルマップの長方構造は不要になります。 iOS 7では、次のことができます。

[mapView showAnnotations:mapView.annotations animated:YES];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top