【问题标题】:Add resizable circle radius on GoogleMaps API for iOS在适用于 iOS 的 Google Maps API 上添加可调整大小的圆半径
【发布时间】:2020-01-30 14:21:35
【问题描述】:

我正在尝试制作一个用户可以调整大小的圆形半径区域,并且我可以获得当前位置的半径数。

=================

tl;dr 已编辑

我想用 swift 将this 制作成 iOS 应用。

==================

现在,我已经创建了监听当前位置的地图。使用CLLocationManager,我正在观察它的更新位置,地图将显示我的位置。

import UIKit
import GoogleMaps

class ViewController: UIViewController, CLLocationManagerDelegate {
    @IBOutlet var mapView: GMSMapView!

    // Current Location Components
    var locationManager = CLLocationManager()
    var didFindMyLocation = false

    override func viewDidLoad() {
        super.viewDidLoad()

        // Current Location Delegate
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()

        // Observer for update location (Moving)
        mapView.addObserver(self, forKeyPath: "myLocation", options: NSKeyValueObservingOptions.New, context: nil)
    }

    // Core Location Location Manager Delegate
    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        if status == CLAuthorizationStatus.AuthorizedWhenInUse {
            mapView.myLocationEnabled = true
        }
    }

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        if !didFindMyLocation {
            let myLocation: CLLocation = change![NSKeyValueChangeNewKey] as! CLLocation
            mapView.camera = GMSCameraPosition.cameraWithTarget(myLocation.coordinate, zoom: 18.0)
            mapView.settings.myLocationButton = true

            didFindMyLocation = true
        }
    }

现在我想做一个可调整大小的圆圈。有人已经在 android here 中创建了它。圆/半径可以通过手势缩小或扩大,我可以像question 那样从它的中心获取该圆的半径。这就是我想要的应用程序。

那么,我应该为这个可调整半径的圆使用什么?我非常感谢每一个答案和想法。谢谢!

【问题讨论】:

    标签: ios swift google-maps


    【解决方案1】:

    我会创建一个多边形/圆形作为叠加层。

    https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_circle

    例如:

    let circle = GMSCircle()
    circle.radius = 130 // Meters
    circle.fillColor = UIColor.redColor()
    circle.position = CLLOCATION.coordinate // Your CLLocationCoordinate2D  position
    circle.strokeWidth = 5;
    circle.strokeColor = UIColor.blackColor()
    circle.map = mapView; // Add it to the map
    

    调整它的大小,我会用 UIView 覆盖整个屏幕,并启用 UIPanGestureRecognizer

    在此处查看示例: Resizable Centered Circular UIView

    【讨论】:

    • 那些圆圈能和地图相连吗?因为我也想得到它的半径,就像这个问题的答案stackoverflow.com/questions/32722122/…一样。谢谢!
    • 当然 - GMSCircle 是谷歌地图的真正覆盖 - 但你无法使用你的 UIPanGestureRecognizer(据我所知)。因此,您可以创建一个“隐藏的”圆形叠加层来接收平移手势,并将其绘制在“真实”的圆形上。
    • 好的,我可以在上面画圆圈了。但是如何创建“隐藏”的圆圈覆盖来接收平移手势,然后将其绘制在“真实”的圆圈上?无论如何,非常感谢。
    • 您可以使用“任何”UIView 覆盖您的谷歌地图。像一个圆圈。只需从创建一个“真实”圆圈作为 GMSCircle 开始 - 然后,当用户在 GMSCircle 上“点击”时,您应该将其更改为另一种颜色(向用户显示他现在可以更改大小)-> 然后添加一个 SubView一个 UIView 来接收 Pan Gestures(所以 GMSMap 不接收任何触摸事件,只有圆形)-> 当用户平移时,只需刷新 GMSMap 上的圆形半径。
    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多