如标题所示,无论我给出什么坐标,我都会看到相同的位置。
这是我的代码:
我正在使用故事板,我的视图中有一个子视图。子视图的类型为GMSMapView,并且链接正确。
·H
@property (strong, nonatomic) IBOutlet GMSMapView *mymap;
的.m
@implementation DealViewController
{
GMSMapView *mapView_;
}
@synthesize mymap=_mymap;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view layoutIfNeeded];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
longitude:151.2086
zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 0, 300, 300) camera:camera];
mapView_.myLocationEnabled = YES;
mapView_.mapType = kGMSTypeSatellite;
mapView_.delegate = self;
self.mymap=mapView_;
}
我也试过这个,但我得到了同样的结果:
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
以上是什么问题?
答案 0 :(得分:9)
经过数小时对同一问题的残酷研究后,我发现viewDidLoad方法应如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:obj.latitude
longitude:obj.longitude
zoom:12];
self.mapView.camera = camera;
}
换句话说,在这种情况下你不应该为self.mapView分配任何值(比如'[GMSMapView mapWithFrame:CGRectMake(0,0,300,300)camera:camera];'),只需设置它的属性'camera '价值。
这对我有用。我希望这也能为其他人节省时间。
答案 1 :(得分:6)
如果您使用的是故事板,请确保在故事板UI中将视图类型设置为GMSMapView。
然后您需要做的就是:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view layoutIfNeeded];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
longitude:151.2086
zoom:6];
self.mymap.camera = camera;
self.mymap.myLocationEnabled = YES;
self.mymap.mapType = kGMSTypeSatellite;
self.mymap.delegate = self;
}
上有一个故事板示例
答案 2 :(得分:0)
我认为这是你的问题:
@property (strong, nonatomic) IBOutlet GMSMapView *mymap;
@implementation DealViewController
{
GMSMapView *mapView_;
}
@synthesize mymap=_mymap;
mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 0, 300, 300) camera:camera];
您的地图来自您的故事板,名为mymap
。您创建了一个名为mapView_
但的实例变量,您将mymap
合成为_mymap
...这是不同的。
不是使用实例变量,而是直接访问该属性。将所有mapView_
个实例替换为self.mymap
。
例如:
self.mymap = [GMSMapView mapWithFrame:CGRectMake(0, 0, 300, 300) camera:camera];
至于为什么它不会移动到用户的位置 - 以下是Google Maps iOS SDK文档对myLocationEnabled
属性所说的内容:
myLocationEnabled
- 控制是否启用“我的位置”点和准确度圈。
... 不做的是将地图移动到当前用户的位置。它仅在地图上显示用户的位置点和圆。
您的地图始终显示相同的位置,因为您永远不会更改它。您创建一个设置为(-33.8683,151.2086)的摄像头,要求地图显示用户的位置指示器,但不要求地图将的位置更改为用户的位置。
要执行此操作,您可以使用地图的myLocation
属性获取用户的当前位置,然后使用animateToLocation
方法相应地移动地图。
答案 3 :(得分:0)
GMSMapView
似乎很难适应GMSCoordinateBounds
:
1)您使用GMSMapView
框架
.zero
2)屏幕上尚未显示GMSMapView
3)GMSMapView
是任何给定UIViewController
在这三种情况中,您必须明确设置相机:
let camera = GMSCameraPosition.camera(withTarget: B.center, zoom: 19)
self.map.camera = camera