Я создаю приложение с пользовательской картой, используя плитки GoogleMaps и класс GMSSyncTileLayer. По какой-то причине плитки не отображаются должным образом. Здесь предоставляется одна отдельная плитка независимо от координат (для целей тестирования). Плитки имеют размер 256 * 256 (производится с помощью MapTiler), и в этом примере я ожидаю, что эта одна плитка будет повторяться и заполнять пространство. Я пробовал разные layer.tileSize = 1024 производит самые большие плитки, 512 и 256 соответственно меньше. Очевидно, я не понимаю, что здесь происходит. Как правильно использовать плитки?
--- Редактировать --- Смотрите мой ответ ниже - возможно, проблема в том, что у меня были эти плитки в папке Assets.xcassets вместо обычной папки. Однако не проверял это, поскольку код теперь переместился в MapKit.
class MapTileLayer: GMSSyncTileLayer {
override func tileFor(x: UInt, y: UInt, zoom: UInt) -> UIImage? {
// Return one specific 256*256 Map tile
let pathToImage = "MapTilesFolder/14/9370/4516"
if let tile = UIImage(named: pathToImage) {
return tile
} else {
return kGMSTileLayerNoTile
}
}
}
import UIKit
import GoogleMaps
class DetailViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let camera = GMSCameraPosition.camera(withLatitude: 62.545144, longitude: 25.905153, zoom: 16.0)
let mapView = GMSMapView.map(withFrame: self.view.frame, camera: camera)
mapView.mapType = GMSMapViewType.none
view = mapView
let layer = MapTileLayer()
layer.tileSize = 1024
layer.map = mapView
// Creates a marker in the center of the map.
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: 62.545144, longitude: 25.905153)
marker.title = "Marker"
marker.snippet = "Place"
marker.map = mapView
}
}
И результат выглядит как на устройстве, так и на симуляторе. При меньшем значении tileSize получается только больше маленьких плиток, но не охватывающих всю область.