GMSMapView始终显示相同的iOS位置

时间:2013-07-02 14:02:56

标签: ios google-maps-sdk-ios gmsmapview

如标题所示,无论我给出什么坐标,我都会看到相同的位置。

这是我的代码:

我正在使用故事板,我的视图中有一个子视图。子视图的类型为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];

以上是什么问题?

4 个答案:

答案 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;
}

Google Maps github page.

上有一个故事板示例

答案 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