【问题标题】:Mapkit - Zoom level keeps resettingMapkit - 缩放级别不断重置
【发布时间】:2010-10-27 15:00:44
【问题描述】:

我有以下代码:

-(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,因为每次收到新的位置更新时,缩放级别都会重置。

有没有办法检测用户放大或缩小?

更新

我添加了 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 更改。
中心现在是 54.181150,-8.483177,Deltas=0.050000,0.050000

2010-11-01 15:17:30.553 Legginit[2948:307] 区域 DID 更改。
中心现在是 54.181150,-8.483177,Deltas=0.050000,0.050000

2010-11-01 15:17:31.063 Legginit[2948:307] 区域 DID 更改。
中心现在是 54.181150,-8.483177,Deltas=0.050000,0.050000

2010-11-01 15:17:31.653 Legginit[2948:307] 区域 DID 更改。
中心现在是 54.181150,-8.483177,Deltas=0.050000,0.050000

2010-11-01 15:17:32.582 Legginit[2948:307] 区域 DID 更改。
中心现在是 54.181150,-8.483177,Deltas=0.050000,0.050000

2010-11-01 15:17:33.608 Legginit[2948:307] 区域 DID 更改。
中心现在是 54.181150,-8.483177,Deltas=0.050000,0.050000

当我放大手机时,我预计 Delta 值会发生变化,但它们仍保持在 0.05。我是否误解了这是如何工作的。我想我可以捕获 Delta 值并存储它们,这样如果用户退出并重新进入地图,我可以重置缩放级别。

问候, 斯蒂芬

【问题讨论】:

    标签: iphone mkmapview


    【解决方案1】:

    在 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);
    }
    

    【讨论】:

    • aBitObvious,我已经走上了使用 regionWillChangeAnimated 的道路。我已经更新了我上面的问题,如果你有时间可以快速看一下。我不认为我完全理解它是如何工作的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      相关资源
      最近更新 更多