Cannot move a camera on GMSMapView of Google Maps for iOS - ios

I have created a GMSMapVIew objects as shown in code. Unfortunately, camera is not set on the right coordinates:
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:latitude
longitude:longitude
zoom:15];
mapView_ = [[GMSMapView alloc] initWithFrame:CGRectMake(505, 280, 427, 200)];
mapView_.camera = camera;
mapView_.myLocationEnabled = YES;
UIViewController *mapController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
mapController.view = mapView_;
[self addChildViewController:mapController];
[self.view addSubview:mapView_];
I have tried additionally to relocate camera with following code, but with no success either:
CLLocationCoordinate2D current = CLLocationCoordinate2DMake(latitude,longitude);
GMSCameraUpdate *currentCam = [GMSCameraUpdate setTarget:current];
[mapView_ animateWithCameraUpdate:currentCam];
Does anybody have an idea, what am I doing wrong, or is this simple a bug in Google Maps for iOS?

Are you using the same
CLLocationCoordinate2D current = CLLocationCoordinate2DMake(latitude,longitude);
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:latitude
longitude:longitude
zoom:15];
latitude and longitude? The obviously it wont work as nothing changes ...

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.

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_;
}

How to reduce the screen size of google map in ios application

In my application I have included google maps API but the problem is, it is occupying the entire screen but I dont want it occupy entire screen as I have other UI controls on the same screen. I have my code pasted below.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:12.9699 longitude:77.6499 zoom:6];
mapView_ = [GMSMapView mapWithFrame: CGRectMake(0,0, 10, 25) camera: camera];
mapView_.myLocationEnabled = YES;
NSLog(#"User's location: %#", mapView_.myLocation);
UIEdgeInsets mapInsets = UIEdgeInsetsMake(100.0,10.0, 10.0, 300.0);
mapView_.padding = mapInsets;
self.view = mapView_;
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(12.9699,77.6499);
marker.title = #"BANGALORE";
marker.snippet = #"IndraNagar";
marker.map = mapView_;
self.view = mapView_; instead of this add below code
UIView * MApBaseView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];// add your frame size here
[self.view addSubview:MApBaseView];
[MApBaseView addSubview: mapView_];
Try with this code, it work for me:
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:latitude
longitude:longitude
zoom:14];
mapView = [GMSMapView mapWithFrame:mapViewContent.frame camera:camera];
mapView.myLocationEnabled = YES;
mapView.delegate = self;
[mapViewContent addSubview:mapView];
mapViewContent is your view custom.
You should replace marker.map = mapView_; as [self.view addSubview:mapView_];
See the below code
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:locationManager.location.coordinate.latitude
longitude:locationManager.location.coordinate.longitude
zoom:16];
mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 44, self.view.bounds.size.width, self.view.bounds.size.height-44) camera:camera];
mapView_.myLocationEnabled = YES;
[self.view addSubview:mapView_];

I can't see map after adding google map sdk for ios

I want to add a google map above a UIViewController. But I can't see anything except some markers I defined. The problem looks like this:
And here is the related code:
- (void)viewDidLoad {
previousContext = [EAGLContext currentContext];
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
longitude:151.2086
zoom:10];
mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 0, 1136, 640) camera:camera];
//mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.settings.compassButton = YES;
mapView_.settings.myLocationButton = YES;
mapView_.delegate = self;
// Listen to the myLocation property of GMSMapView.
[mapView_ addObserver:self
forKeyPath:#"myLocation"
options:NSKeyValueObservingOptionNew
context:NULL];
[EAGLContext setCurrentContext: previousContext];
//add makers
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(39.900285, 116.274020);
GMSMarker *marker = [GMSMarker markerWithPosition:position];
marker.title = #"aaa";
marker.snippet = #"population : 5";
marker.infoWindowAnchor = CGPointMake(0.5, 0.5);
marker.map = mapView_;
marker.icon = [UIImage imageNamed:#"tempmarker.png"];
CLLocationCoordinate2D position2 = CLLocationCoordinate2DMake(39.860285, 116.274020);
GMSMarker *marker2 = [GMSMarker markerWithPosition:position2];
marker2.title = #"bbb";
marker2.snippet = #"population : 5";
marker2.infoWindowAnchor = CGPointMake(0.5, 0.5);
marker2.map = mapView_;
marker2.icon = [UIImage imageNamed:#"tempmarker2.png"];
//add buttons:directRoom, rank, achievement, mission, home
....
[self.view insertSubview: mapView_ atIndex: 0];
[EAGLContext setCurrentContext:nil];
// Ask for My Location data after the map has already been added to the UI.
dispatch_async(dispatch_get_main_queue(), ^{
mapView_.myLocationEnabled = YES;
});
}
So, how to deal with this problem, thanks a lot!
For reference, see the demo from Google (copied below). It's similar to what you posted, but you can try a couple of things:
make sure your API key is valid and the API can fetch tiles
check the z-index ordering of the map view you're inserting: [self.view insertSubview: mapView_ atIndex: 0]; inserts behind everything else. Try [self.view addSubview:mapView_]
Demo code, from Google (https://developers.google.com/maps/documentation/ios/):
#import <GoogleMaps/GoogleMaps.h>
#import "DemoViewController.h"
#implementation DemoViewController
- (void)viewDidLoad {
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
longitude:151.2086
zoom:6];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = camera.target;
marker.snippet = #"Hello World";
marker.animated = YES;
self.view = mapView;
}
#end
Check whether you have entered the google API key correctly in the didFinishLaunchingWithOption in your app delegate
[GMSServices provideAPIKey:#"yourGoogleAssignedSDKKeyGoesHere"];
And your xcode should be 4.5 or later

Black screen when assigning google maps to subview

I am trying to load places inside Google Map View for iOS6.
How to set the frame for the Map ?
Currently it is fullscreen
-(void)loadView {
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:10.00989
longitude:76.316142
zoom:15];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
self.view = mapView_;
}
I tried by creating a new (small) view inside the current view and add map inside that,but at that time the page is not getting loaded.It shows a full black screen
-(void)loadView {
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:10.00989
longitude:76.316142
zoom:15];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
[self.view Addsubview:newView];
self.newView = mapView_;
}
Finally found the solution.
Remove the loadview method, and put the following code in the view did load method:
-(void)viewDidLoad{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20
zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 0, 100, 100) camera:camera];
[self.view addSubview:mapView_];
// Create a GMSCameraPosition that tells the map to display the
// coordinate -33.86,151.20 at zoom level 6.
mapView_.myLocationEnabled = YES;
// 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_;
}
Try
mapView_ = [GMSMapView mapWithFrame:self.view.bounds camera:camera];
[self.view addSubview:mapView_];
if you put into loadView it wont have a view.. the xib isn't even loaded...
put it in viewDidLoad
and do
mapView_ = [GMSMapView mapWithFrame:self.view.bounds camera:camera];
[self.view addSubview:mapView_];
Check the declaration #property for GMSMapView , if it is weak property then make it strong.
#property (strong,nonatomic)GMSMapView *mapView;
By removing func loadView from my code fixed my problem
override func loadView() {
}
Or by putting this line of code inside the loadView
override func loadView() {
self.view = GMSMapView(frame: UIScreen.main.bounds)
}

Resources