MapKit を使用するアプリがあります。
マップのサイズを変更した後、現在のズームを計算します。
定義による (MKGeometry.h
ファイルから)
MKZoomScale provides a conversion factor between MKMapPoints and screen points.
When MKZoomScale = 1, 1 screen point = 1 MKMapPoint. When MKZoomScale is
0.5, 1 screen point = 2 MKMapPoints.
だから、私はこのように計算します:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
CGSize screenSize = mapView.bounds.size;
MKMapRect mapRect = mapView.visibleMapRect;
MKZoomScale zoomScale = screenSize.width * screenSize.height / (mapRect.size.width * mapRect.size.height);
}
計算zoomScale
は定義に準拠しています(私はチェックしました)。
メソッドで mapView にオーバーレイも描画します
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
問題は、私の計算zoomScale
が、システムによってこのメソッドに渡されたものと等しくないことです。drawMapRect:
サイズ変更の直後に呼び出しが行われるため (実際には、サイズ変更によってこのメソッドが呼び出されます)、それらは等しいと予想されます。
ここで何が問題なのですか?
私も使ってみました
currentZoomScale = mapView.bounds.size.width / mapView.visibleMapRect.size.width;
、ここで提案されていますが、これcurrentZoomScale
は渡されたものと同じではありませんdrawMapRect:
。