【问题标题】:MapKit iPhone display Zoom ControlsMapKit iPhone 显示缩放控件
【发布时间】:2012-01-19 09:34:58
【问题描述】:

是否可以使用 MapKit 在 iPhone 中显示地图,就像我正在做的那样,在地图上显示缩放控件?

如果不是,我应该使用哪些标志或方法来增加和减少缩放,所以我可以创建方法,只需按一下按钮就可以做到这一点。

【问题讨论】:

    标签: iphone objective-c map zooming


    【解决方案1】:

    我不记得(在 Windows 框上工作)是否有显示缩放控件的开关。我假设您正在谈论显示缩放级别,因为默认情况下您可以捏合/展开视图以进行缩放。

    如果没有显示控件的开关,那么您需要创建一个自定义视图层并将其放在 mapkit 视图的顶部。然后你需要调用不同的函数来改变缩放级别。

    这些功能都记录在 mapkit 文档中。只需在文档中心搜索 MapKit。

    编辑: http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/doc/uid/TP40008205

    根据文档,没有显示控件的开关,但启用缩放属性可让您打开和关闭该功能。

    因此您可以订阅委托函数 regionWillChange 并使用 mapView 对象来获取缩放级别,然后相应地设置您的图形。

    【讨论】:

      【解决方案2】:

      没有任何内置控件。

      几个建议:

      1. 您可以预定义一些跨度并将它们存储在某个数组中,然后也将您的位置存储在该数组中。放大/缩小会更改位置并获取跨度。
      2. 放大使用当前跨度并除以 2,缩小乘以 2。

      您更改 mapView 区域中的跨度。所以你必须:

      • 获取 mapView 的区域。
      • 获取区域的跨度。
      • 将跨度更改为您想要的。
      • 将区域跨度设置为新跨度。
      • 将 mapView 的区域设置为新区域。

      以下是建议 2 的一些代码:

      MKCoordinateRegion region = mapView.region;
      MKCoordinateSpan span;
      span.latitudeDelta = region.span.latitudeDelta*2;
      span.longitudeDelta = region.span.longitudeDelta*2;
      region.span = span;
      [mapView setRegion:region animated:TRUE];
      

      【讨论】:

      • 谢谢!快捷版:var region = mapView.region; var span = MKCoordinateSpan(); span.latitudeDelta = region.span.latitudeDelta*2; span.longitudeDelta = region.span.longitudeDelta*2; region.span = span; mapView.setRegion(region, animated: true);
      【解决方案3】:

      我认为您不应该这样做,放大和缩小的预期方法是使用捏合手势。但是,如果您仍想继续执行此操作,则应将按钮放在MKMapView 上,然后修改MKMapView 的region 属性

      【讨论】:

        【解决方案4】:

        对于 swift 4,这是我使用的:

        func zoom(_ zoomin : Bool) {
            var region = mapView.region;
            var span = MKCoordinateSpan();
            span.latitudeDelta = zoomin ? region.span.latitudeDelta / 2 :  region.span.latitudeDelta * 2;
            span.longitudeDelta = zoomin ? region.span.longitudeDelta / 2 : region.span.longitudeDelta * 2;
            region.span = span;
        
            mapView.setRegion(region, animated: true);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-29
          • 2011-10-15
          相关资源
          最近更新 更多