1

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

这是我的代码:

我正在使用情节提要,并且我的视图中有一个子视图。子视图是 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

4 回答 4

11

经过数小时对同一问题的残酷研究,我发现 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' 值。

这对我有用。我希望这也可以为其他人节省时间。

于 2013-08-02T21:24:28.647 回答
5

如果您使用故事板,请确保您已将视图的类型设置为故事板 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 页面上有一个故事板示例。

于 2013-07-03T04:16:58.037 回答
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地移动地图的方法。

于 2013-07-02T14:14:48.493 回答
0

GMSMapViewGMSCoordinateBounds在这些情况下似乎很难适应:

GMSMapView1)你用一个.zero框架初始化

2)GMSMapView屏幕上尚不可见

3)GMSMapView是任何给定的子视图UIViewController

在这三种情况中的任何一种情况下,您都必须明确设置相机:

let camera = GMSCameraPosition.camera(withTarget: B.center, zoom: 19)
self.map.camera = camera
于 2017-06-29T21:04:04.780 回答