当跨度改变时,MKCoordinateregion的中心会发生变化 - iphone

时间:2011-10-01 06:02:43

标签: iphone mkmapview mkcoordinateregion

我有一个名为region的MKCoordinateregion。我想改变这个区域的跨度而不改变它的中心。我正在使用以下方法来改变缩放。

 -(void) changeZoom
    {

     NSLog(@"before zoom span, center are   %f, %f,%f,%f", region.span.latitudeDelta, region.span.longitudeDelta, mymap.centerCoordinate.latitude, mymap.centerCoordinate.longitude);
                region.span.latitudeDelta = current_factor ;
                region.span.longitudeDelta = current_factor ;
                region.center.latitude = mymap.centerCoordinate.latitude ;
                region.center.longitude = mymap.centerCoordinate.longitude ;
                [mymap setRegion:region animated:TRUE];

                NSLog(@"after zoom span, center are   %f, %f,%f,%f", region.span.latitudeDelta, region.span.longitudeDelta, mymap.centerCoordinate.latitude, mymap.centerCoordinate.longitude);
    }

日志显示:

before zoom span, center are   0.021950, 0.021950,19.068080,72.838111
 after zoom span, center are   0.043901, 0.043901,19.068040,72.838154

此方法可以根据需要精确设置范围。但我不希望中心坐标发生任何变化,因为当我缩小然后缩小时,我最终会在与起始位置不同的位置。

是否有任何方法可以在不改变中心的情况下放大和缩小?

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:1)

您的前后坐标几乎完全相同,所以它应该不是问题。如果您确实需要完全相同的中心坐标,请在使用setCenterCoordinate:animated:后立即致电setRegion:animated:并传递一些已保存的中心坐标。

CLLocationCoordinate2D originalCenter = mymap.centerCoordinate;
// ... adjust region
[mymap setCenterCoordinate:originalCenter animated:NO];

此外,您应该使用YES而不是TRUE来表示布尔值:

[mymap setRegion:region animated:YES];

答案 1 :(得分:0)

您需要调整地图的区域以确保宽高比符合地图视图的帧大小。

计算出具有所需中心的区域后,将区域调整为

MKCoordinateRegion adjustedRegion = [mymap regionThatFits:region];
[mymap setRegion:adjustedRegion animated:TRUE];

请参阅docs