2010-10-27 48 views
1

我已经制定了下面的代码:Mapkit - 缩放级别不断复位

-(void)viewDidLoad 
{ 
    //Set Zoom level using Span 
    MKCoordinateSpan span; 
    span.latitudeDelta = 0.05; 
    span.longitudeDelta = 0.05; 
    region.span = span; 
} 


-(void)locationChange:(CLLocation *)newLocation: (CLLocation *)oldLocation 
{ 
    // This zooms in on the users current loation. 
    curlocation = newLocation.coordinate; 
    region.center = curlocation; 

    [_mapView setRegion:region animated:TRUE]; 
} 

最初的缩放级别设置为每个在viewDidLoad中的代码。如何存储用户放大或缩小的缩放级别ID,因为每次接收到新的位置更新时缩放级别都将被重置。

是否有检测用户放大或缩小的方法?

UPDATE

我已经添加regionDidChangeAnimated方法如下:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 
{ 
    NSLog(@"Region DID change. Center is now %f,%f, Deltas=%f,%f", 
      region.center.latitude, region.center.longitude, 
      region.span.latitudeDelta, region.span.longitudeDelta); 
} 

日志中输出的样子:

2010-11-01 15:17:29.317 Legginit [2948:307]地区DID更改。
Center现在是54.181150,-8.483177,Deltas = 0.050000,0.050000

2010-11-01 15:17:30.553 Legginit [2948:307] Region DID change。
Center现在是54.181150,-8.483177,Deltas = 0.050000,0.050000

2010-11-01 15:17:31.063 Legginit [2948:307] Region DID change。
中心现已54.181150,-8.483177,德尔塔= 0.050000,0.050000

2010-11-01 15:17:31.653 Legginit [2948:307]的整数区域DID变化。
Center现在是54.181150,-8.483177,Deltas = 0.050000,0.050000

2010-11-01 15:17:32.582 Legginit [2948:307] Region DID change。
Center现在是54.181150,-8.483177,Deltas = 0.050000,0.050000

2010-11-01 15:17:33.608 Legginit [2948:307] Region DID change。
Centre现在是54.181150,-8.483177,Deltas = 0.050000,0.050000

当我放大电话时,我期待Delta值发生变化,但仍保持在0.05。我误解了这是如何工作的。我认为我可以捕获Delta值并存储它们,这样如果用户退出并重新输入地图,我可以重置缩放级别。

问候, 斯蒂芬

回答

2

在locationChange,尝试调用setRegion之前更新区域的跨度为_mapView的电流量程:

region.span = _mapView.region.span; 

如果你真的需要检测变焦变化,因为它们发生,实现MKMapViewDelegate方法regionWillChangeAnimated或regionDidChangeAnimated。

编辑:
您需要从的MapView获得新的地区和您的区域实例变量设置为它(地图视图不会自动设置您的实例变量):

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 
{ 
    region = mapView.region; //<-- add this 

    NSLog(@"Region DID change. Center is now %f,%f, Deltas=%f,%f", 
      region.center.latitude, region.center.longitude, 
      region.span.latitudeDelta, region.span.longitudeDelta); 
} 
+0

aBit显然,我走下了使用regionWillChangeAnimated的道路。我上面更新了我的问题,如果你有一分钟​​,你能否快速查看。我不认为我完全理解它是如何工作的。 – Stephen 2010-11-01 15:41:07

+0

我已经更新了答案。 – Anna 2010-11-01 16:15:31

0

相反使用该区域,只需更改中心坐标。我发现设置区域本身可以稍微改变缩放级别,即使告诉mapView使用与当前mapView相同的区域。

[_mapView setCenterCoordinate:newLocation.coordinate animated:YES];