ver usar ubicacion rutas peajes mapas hay google funciona esta disponibles desde como celular ios uiview subview google-maps-sdk-ios

ios - usar - ¿No se puede colocar un google maps GMSMapView en una subvista de la vista principal principal?



no hay rutas disponibles desde esta ubicacion (10)

Estaba recibiendo la pantalla en negro solo porque olvidé agregar esta línea:

[super loadView];

Estoy luchando con este problema! Quiero agregar un google maps GMSMapView en una UIView que es solo una parte de la UIView principal de mi ViewController .

Debería ser simple ... UIView con el guión gráfico una UIView del tamaño que quiero y lo puse en la UIView principal.

Fragmento del archivo de interfaz:

@interface MapViewController : UIViewController <CLLocationManagerDelegate> @property(nonatomic) IBOutlet GMSMapView *mapView;

Con el mapView vinculado con este UIView dentro de la UIView principal.

Lo que hago en la implementación:

@synthesize mapView = _mapView; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:10]; _mapView = [GMSMapView mapWithFrame:_mapView.bounds camera:camera]; _mapView.myLocationEnabled = YES; }

Esto debería funcionar, ¿no es así? Lo que obtengo es que mi UIView interno está vacío.

Si instancia un mapa siguiendo la guía de inicio de Google Documento de integración de mapa de Google , funciona, pero asigna el mapa a la UIView principal y eso es algo diferente.

Intenté incluso cambiar la clase de mi mapView en el guión gráfico de UIView a GMSMapView . El mapa se muestra en la vista interna pero se inicializa de forma extraña

  1. El sistema arroja un error que dice

"Error al hacer el buffer de cuadro completo"

y ralentizando mucho la carga de la vista (tarda 2-3 segundos en el simulador)

  1. El mapa no responde en ningún cambio de cámara realizado en el método viewDidLoad .

¿Alguna sugerencia?

Leí algunas publicaciones aquí en StackOverflow pero no pude encontrar una solución válida :(


Haber verificado y trabajar en Swift 2.0 las tres opciones proporcionadas por cloudsurfin . Traduciendo su respuesta para aquellos que enfrentan el mismo problema en Swift 2.0:

Opción 1 : visualice el XIB y cambie su clase a GMSMapView en el constructor XIB.

Opción 2 : codifíquelo todo. Agregue el mapa como una subvista de la vista principal.

Opción 3 : agregue el mapa como una subvista GMSMapView de la subvista UIView ya existente.

Explicación de los preparativos en XIB para la Opción 1 :

1) Establezca una clase para su vista:

2) No olvides conectar tu vista con la salida en el código:

import UIKit import GoogleMaps class MapViewController: UIViewController { @IBOutlet weak var map1 : GMSMapView! @IBOutlet weak var map3 : UIView! override func viewDidLoad() { super.viewDidLoad() let camera = GMSCameraPosition.cameraWithLatitude(53.9, longitude: 27.5667, zoom: 6) // Option 1. view on XIB is class GSMMapView self.map1.camera = camera; // Option 2. add a map as a subview let map2 = GMSMapView.mapWithFrame(CGRectMake(0, 64, 320, 460), camera:camera) self.view.addSubview(map2) // Option 3. add a map to a subview of UIView class that is already on the XIB let map3 = GMSMapView.mapWithFrame(self.plainViewOnXIBHoldsMap3.bounds, camera:camera) self.plainViewOnXIBHoldsMap3.addSubview(map3) } }

Espero que esta nota ayude a alguien :)


Mis sugerencias:

  1. Vincule UIView de su guión gráfico a su archivo de encabezado como una variable de instancia de UIView, no como una GMSMapView
  2. Cambie el método mapWithFrame: camera: para establecerlo en los límites de UIView vinculados
  3. Al final del método viewDidLoad: establezca la variable de instancia UIView en su GMSMapView, o agregue una subvista. También he tenido problemas con esto, y jugar con esto generalmente funcionará.

.h

@interface MapViewController: UIViewController <CLLocationManagerDelegate> { IBOutlet UIView *mapViewOnSreen; }

.metro

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:10]; _mapView = [GMSMapView mapWithFrame:mapViewOnScreen.bounds camera:camera]; _mapView.myLocationEnabled = YES; mapViewOnScreen = _mapView //OR [self.view addSubview:_mapView]; //OR [mapViewOnScreen addSubview:_mapView]; <--This worked for me }

* Editar: Creé una pequeña UIView dentro de la vista principal usando IB. Seguí los pasos enumerados y pude ver el mapa dentro de la pequeña UIView cuando configuré [mapViewOnScreen addSubview: _mapView];


Para Swift 3 y si subclase el GMSMapView

  1. Agregue UIView a UIViewController en UIViewController

  1. Cambie la clase a GMSMapView en UiView lugar UiView

  1. Crear referencia en la clase UIViewController

    @IBOutlet weak var mapView: GMSMapView!

  2. Como está subclasificando, no necesita usar ese GMSMapView.map(withFrame: CGRect.zero, camera: camera) mencionado en los documentos. Simplemente cargue el mapa de la siguiente manera

    let camera = GMSCameraPosition.camera(withLatitude: 51.50, longitude: -0.076, zoom: 10.0) mapView.camera = camera

  3. Para agregar marcador

    let marker = GMSMarker() marker.position = CLLocationCoordinate2D(latitude: 51.50, longitude: -0.076) marker.title = "London" marker.snippet = "UK" marker.map = mapView

  4. Juntos como una función

    override func viewDidLoad() { super.viewDidLoad() load() } func load() { //map let camera = GMSCameraPosition.camera(withLatitude: 51.50, longitude: -0.076, zoom: 10.0) mapView.camera = camera //marker let marker = GMSMarker() marker.position = CLLocationCoordinate2D(latitude: 51.50, longitude: -0.076) marker.title = "London" marker.snippet = "UK" marker.map = mapView }


Pasé aproximadamente media hora tratando de hacer que esto funcione y luego me di cuenta de que lo tenía mal. El ejemplo de google getting started te dice que lo pongas - (void) loadView pero si lo haces obtendrás una pantalla negra o un mapa de pantalla completa. Debes ponerlo en (void) viewDidLoad. Entonces funciona


Según otras respuestas, aquí hay tres formas que realmente funcionan.

  1. Ponga una vista en el XIB y cambie su clase a GMSMapView en XIB Builder. Ver * mapa1 a continuación. O...
  2. Codifíquelo todo. Agregue el mapa como una subvista de la vista principal. Ver * map2 a continuación. O...
  3. Agregue el mapa como una subvista de otra subvista que ya está en el XIB con una salida. * mapa3 a continuación.

.h

@interface GPViewController : UIViewController @property (strong, nonatomic) IBOutlet GMSMapView *map1; @property (strong, nonatomic) IBOutlet UIView *plainViewOnXIBHoldsMap3; @end

.metro

- (void)viewDidLoad{ [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.0 longitude:151.20 zoom:6]; /* Option 1. view on XIB is class GSMMapView */ self.map1.camera = camera; /* Option 2. add a map as a subview */ GMSMapView *map2 = [GMSMapView mapWithFrame:CGRectMake(0, 0, 100, 100) camera:camera]; [self.view addSubview:map2]; /* Option 3. add a map to a subview already on the XIB */ GMSMapView *map3 = [GMSMapView mapWithFrame:self.plainViewOnXIBHoldsMap3.bounds camera:camera]; [self.plainViewOnXIBHoldsMap addSubview:map3]; }


Siguiendo el tutorial de Google para Swift en Sep-2017

Lo arreglé poniendo el código en viewDidLoad como este

var mapView: GMSMapView! override func viewDidLoad() { super.viewDidLoad() // Create a GMSCameraPosition to display the initial center of the map let camera = GMSCameraPosition.camera(withLatitude: 23.885942, longitude: 45.079162, zoom: 5.1) // Set the frame size , don''t forget to replace "<CustomFrame>" with the required frame size mapView = GMSMapView.map(withFrame: "<CustomFrame>", camera: camera) // Add the map to any view here view.addSubview(mapView) //or customView.addSubview(mapView) }


configura la clase UIVIEW para que sea GMSMapView en el inspector de identidad.

luego haga un IBOutlet de él: D y hola es trabajo: P


puedes hacerlo a través de IB

.h @property (weak, nonatomic) IBOutlet GMSMapView *theMapView; .m GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:12]; //This next line is not needed if you have a GMSMapView outlet //self.theMapView = [GMSMapView mapWithFrame:self.theMapView.frame camera:camera]; self.theMapView.camera=camera; self.theMapView.mapType = kGMSTypeSatellite; self.theMapView.delegate=self;


(void)viewDidLoad { GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86 longitude:151.20 zoom:14]; GMSMarker *marker = [[GMSMarker alloc] init]; marker.position = CLLocationCoordinate2DMake(-33.86, 151.20); marker.title = @"Sydney"; marker.snippet = @"Australia"; marker.map = self.mapContainerView; //set the camera for the map self.mapContainerView.camera = camera; self.mapContainerView.myLocationEnabled = YES; }