Пользовательский стиль Google Maps занимает секунду, чтобы загрузить - PullRequest
0 голосов
/ 30 августа 2018

Я реализую собственный стиль для своего представления карт Google для приложения автобусного транзита, которое я разрабатываю в XCode 9 с Swift 4. Всякий раз, когда я загружаю вид карты, загрузка всегда занимает чуть меньше секунды пользовательский стиль, и я не уверен, что вызывает это.

Вот эффект, который я описываю:

enter image description here

Как вы можете видеть, фон загара является стилем по умолчанию для просмотра карты Google, и он виден только в течение небольшого периода времени.

Вот мой код, который реализует вид карты:

class StopPredictionVC: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        setUpMapView()
    }

    private func setUpMapView() {
        let stopLatitude = Double(stop!.lat)
        let stopLongitude = Double(stop!.lon)

        let camera = GMSCameraPosition.camera(withLatitude: stopLatitude!, longitude: stopLongitude!, zoom: 16.4)
        let frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
        mapView = GMSMapView.map(withFrame: frame, camera: camera)

        let nightModeEnabled = APIWrapper.sharedInstance.settings.nightMode!

        if nightModeEnabled {
            mapView.mapStyle(withFilename: "nightStyle", andType: "json")
        } else {
            mapView.mapStyle(withFilename: "mapStyle", andType: "json")
        }

        let marker = GMSMarker()
        marker.icon = #imageLiteral(resourceName: "marker")
        marker.appearAnimation = .pop
        marker.position = CLLocationCoordinate2D(latitude: stopLatitude!, longitude: stopLongitude!)
        marker.title = "Bus Stop Name"
        marker.snippet = "Example description"
        marker.map = mapView

        buildRoute(routePath: routeConfig!.path)

        view.addSubview(mapView)
    }
}

extension GMSMapView {
    func mapStyle(withFilename name: String, andType type: String) {
        do {
            if let styleURL = Bundle.main.url(forResource: name, withExtension: type) {
                self.mapStyle = try GMSMapStyle(contentsOfFileURL: styleURL)
            } else {
                NSLog("Unable to find style.json")
            }
        } catch {
            NSLog("One or more of the map styles failed to load. \(error)")
        }
    }
}

buildRoute(routePath:) - это функция, которая строит синюю дорожку на дороге, если кому-то интересно.

Очевидно, что это не очень большая ошибка, но это довольно неприятно видеть каждый раз, когда я загружаю вид карты. Кто-нибудь видел что-нибудь в моем коде, что может быть причиной этого?

1 Ответ

0 голосов
/ 30 августа 2018

Вы вызываете его внутри viewWillAppear, у него есть 2 проблемы, во-первых, он вызывается после viewDidLoad (имеет некоторую задержку), во-вторых, он может вызываться каждый раз, когда отображается VC, например, после возврата из режима push / dismal Modal

так называют setUpMapView внутри viewDidLoad

обратите внимание, что buildRoute(routePath: routeConfig!.path) должен находиться в фоновой очереди, если он вызывает какую-либо веб-службу или выполняет долгую работу внутри mainQueue

Кстати, я также могу попытаться загрузить

GMSMapStyle(contentsOfFileURL: styleURL)

в фоновом потоке и после загрузки, установленной в mainQueue, и только в том случае, если использование GMSMapStyle разрешено в обратном потоке

...