Adding GMSMarker to GMSMapView crashes on iPhone 6 - ios

I have code that loads a map view and places a marker on it. I have basically refactored my code to be Google sample code for adding a GMSMarker. The app runs no problem in the simulator (8.4), but when the marker code is added to the map on my iPhone 6 (marker.map = mapView_), the app crashes and I get the error in Xcode: EXC_BAD_ACCESS (code=1, address=0x0).
The mapView loads fine on the phone when I remove the marker.map = mapView_ line of code. Here is the what I have reduced my code to in viewDidLoad: below.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:loc zoom:12.5];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.settings.myLocationButton = YES;
mapView_.settings.tiltGestures = NO;
mapView_.settings.rotateGestures = NO;
mapView_.delegate = self;
dispatch_async(dispatch_get_main_queue(), ^{
mapView_.myLocationEnabled = YES;
});
self.view = mapView_;
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = camera.target;
marker.snippet = #"Hello World";
marker.appearAnimation = kGMSMarkerAnimationPop;
marker.map = mapView_;

Related

iOS Objective-C Google map shows only on debug when added to a subview

I'm using google maps SDK, first all was working fine but it was shown as a full screen. After adding the map into a subview, the map is no more shown. I added a breakpoint on the IBAction and noticed that after passing:
self.mapView1 = [GMSMapView mapWithFrame:_subview.bounds camera:camera];
the map is shown perfectly in the subview.
Thats my code in IBAction:
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:33.67 longitude:35.55 zoom:12];
self.mapView1 = [GMSMapView mapWithFrame:_subview.bounds camera:camera];
self.mapView1.myLocationEnabled = YES;
[_mapView1 setMinZoom:12 maxZoom:20];
self.mapView1.mapType = kGMSTypeSatellite;
self.mapView1.settings.compassButton = YES;
_mapView1.delegate = self;
[_mapView1 animateToViewingAngle:45];
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(33.67, 35.55);
marker.title = #"City";
marker.snippet = #"Country";
marker.map = _mapView1;
[_subview addSubview:_mapView1];
thats how i want it to look like
Thanks in advance.
Try this it's working for me.
GMSMapView *customView = [[GMSMapView alloc] initWithFrame:CGRectMake(100, 300, 100, 100)];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:33.67 longitude:35.55 zoom:12];
customView = [GMSMapView mapWithFrame:customView.bounds camera:camera];
customView.myLocationEnabled = YES;
[customView setMinZoom:12 maxZoom:20];
customView.mapType = kGMSTypeSatellite;
customView.delegate = self;
[customView animateToViewingAngle:45];
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(33.67, 35.55);
marker.title = #"City";
marker.snippet = #"Country";
marker.map = customView;
[self.view addSubview:customView];
OR
GMSMapView *customView = [[GMSMapView alloc] initWithFrame:CGRectMake(100, 300, 100, 100)];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:33.67 longitude:35.55 zoom:12];
_mapView = [GMSMapView mapWithFrame:customView.bounds camera:camera];
_mapView.myLocationEnabled = YES;
[_mapView setMinZoom:12 maxZoom:20];
_mapView.mapType = kGMSTypeSatellite;
_mapView.settings.compassButton = YES;
_mapView.delegate = self;
[_mapView animateToViewingAngle:45];
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(33.67, 35.55);
marker.title = #"City";
marker.snippet = #"Country";
marker.map = _mapView;
[customView addSubview:_mapView];
[self.view addSubview:customView];
Also check your _subview hidden or not.
Since i can't comment, i will use this way to ask you to do some stuff:
1- Add a breankpoint to this line and check _subview.bounds values.
self.mapView1 = [GMSMapView mapWithFrame:_subview.bounds camera:camera];
2- While running in the simulator click on Debug > View Debugging > Capture View Hierarchy and locate your AVPlayer, check the properties on the right panel.
Check the _subview.bounds when you are creating the GMSMapView.
Depending on the time this is done, it might not be setup and you can end-up with a CGRectZero frame.

Google map load on subviews in IOS

I have implement google map in IOS . But the problem is I can not implement google map on my custom view (subview) .
Thanks in advance .
Create a subview and Define the subview class under GMSMapView
- (void)LoadMap {
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20
zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.myLocationEnabled = YES;
self.view = mapView_;
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
marker.title = #"Sydney";
marker.snippet = #"Australia";
marker.map = mapView_;
// this line add subView
[self.view addSubview : mapView_ ]; }

add google maps in uimaps

I created a viewcontroller with Google maps , but I have no need to insert the card in full size viewcontroller, and I got it ( the new view I added a class GMSMapView) but I need to put this map markers . Example of my marker
CLLocationCoordinate2D position2 = CLLocationCoordinate2DMake(59.957069, 30.323013);
GMSMarker *london2 = [GMSMarker markerWithPosition:position2];
london2.title = #"my office";
london2.snippet = #"description";
london2.map = mapView_;
This is my code
- (void)viewDidLoad {
[super viewDidLoad];
self.mapView_.mapType = kGMSTypeNormal;
self.mapView_.settings.compassButton = YES;
self.mapView_.settings.myLocationButton = YES;
self.mapView_.delegate = self;
[GMSServices provideAPIKey:#"###"];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20
zoom:1];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.myLocationEnabled = YES;
mapView_.settings.compassButton = YES;
mapView_.settings.myLocationButton = YES;
//self.view = mapView_;
GMSMarker *london2 = [GMSMarker markerWithPosition:position2];
london2.title = #"my office";
london2.snippet = #"description";
london2.map = mapView_;
Question - if I add a line self.view = mapView_; the card is reflected on the whole screen with the right markers to me , if I remove , it is reflected without markers , but my desired size - how to fix it ( make a map of the desired size and markers )
You can change your self.view = mapView_;
to the following code:
mapView.frame = CGRectMake(YOUR_MAP_X, YOUR_MAP_Y, YOUR_MAP_WIDTH, YOUR_MAP_HEIGHT);
[self.view addSubview:mapView_];
Your mapView_ will be a subview of your main UIView, instead of occupying the entire screen.

app is crashing without any error

I am trying to integrate the google map sdk and followed this link to start from google. I have created the API key and used it in appDelegate. I wrote below code in my ViewController.m and I have imported all the frameworks required, and also put the -ObjC in other linker flag but still the app is crashing on run time. I have used breakpoints but no log is been shown up. Below is the entire code and haven't used any outlet.
#import "ViewController.h"
#interface ViewController ()
#end
#implementation ViewController
- (void)viewDidLoad {
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20 zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; // crashing here, even gave different frames rather CGRectZero
mapView_.myLocationEnabled = YES;
self.view = mapView_;
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
marker.title = #"Sydney";
marker.snippet = #"Australia";
marker.map = mapView_;
}
#end
DEMO SAMPLE LINK
I downloaded the code and run it. It works perfectly well. Just remove the old app and clear the target. Re-install the app. It should work fine.
Why do you pass CGRectZero to the frame of the map?
Try the following code:-
- (void)viewDidLoad {
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20 zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 0, 320, 320) camera:camera]; // crashing here
mapView_.myLocationEnabled = YES;
[self.view addSubview:mapView_];
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
marker.title = #"Sydney";
marker.snippet = #"Australia";
marker.map = mapView_;
}

GMSMarker points not being shown

I have a viewcontroller in a storyboard with a View in it that loads googlemaps. Markers are however, not showing up!
What have I done wrong?
Here is my code.
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self createBasicGSMView];
}
- (IBAction)AddPointButtonPressed:(id)sender {
// Creates a marker in the center of the map.
GMSMarker *CurrentLocationMarker = [[GMSMarker alloc] init];
CLLocation *CurrentLocationNote = mapView_.myLocation;
CurrentLocationMarker.position = CLLocationCoordinate2DMake(CurrentLocationNote.coordinate.latitude, CurrentLocationNote.coordinate.longitude);
CurrentLocationMarker.title = #"Current Location";
CurrentLocationMarker.snippet = #"This is the place to be";
[CurrentLocationMarker setMap:mapView_];
}
- (void) createBasicGSMView{
// Create a GMSCameraPosition that tells the map to display the
// coordinate -33.86,151.20 at zoom level 6.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20
zoom:1];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.myLocationEnabled = YES;
self.mapViewHolder = mapView_;
// Creates a marker in the center of the map.
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
marker.title = #"Sydney";
marker.snippet = #"Australia";
marker.map = mapView_;
}
Figured it out. had to add the view as a subview:
[self.view addSubview:mapView_];
Doesnt work otherwise!

Resources