无法在 UIView 中调整 Google 地图的大小
Not being able to size Google Map in UIView
我正在使用 Google 地图 SKD,我正在尝试制作适合 UIView
的地图。首先,我添加了一个全屏 UIView
,它在我的应用程序中显示了一个 PanoramaView。效果很好,这里是变量声明:
@IBOutlet weak var streetViewer: UIView!
@IBOutlet weak var gmapViewer: UIView!
var panoView: GMSPanoramaView!
var mapView: GMSMapView!
然后在 viewDiDLoad() 中创建全景图并将其添加为 streetViewer
:
的子视图
panoView = GMSPanoramaView(frame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height))
panoView.delegate = self
panoView.moveNearCoordinate(CLLocationCoordinate2D(latitude: -33.732, longitude: 150.312))
streetViewer.addSubview(panoView)
streetViewer.sendSubviewToBack(panoView)
现在我正在尝试对 UIView
执行相同的操作,它覆盖大约一半的屏幕并在 panoView
层上显示 mapView
。我在这里创建地图,将其添加为 gmapViewer
的子视图,最后也将其添加为子视图并将其移动到 panoView
:
之上
mapView = GMSMapView(frame: CGRectMake(0, 0, gmapViewer.bounds.size.width, gmapViewer.bounds.size.height))
mapView.delegate = self
gmapViewer.addSubview(mapView)
streetViewer.addSubview(gmapViewer)
panoView.sendSubviewToBack(gmapViewer)
我已经对所有 UIView
添加了约束。我还在 gmapViewer
中添加了一些折纸动画并且一切都很好,除了没有填充 gmapViewer
的地图。我认为问题出在 mapView = GMSMapView(frame: CGRectMake(0, 0, gmapViewer.bounds.size.width, gmapViewer.bounds.size.height))
但我无法理解什么不起作用,因为它适用于 panoView
.
在将近 5 年后发布这个,因为它让我觉得这个问题仍然没有答案,我认为我改进了足够的 iOS 程序员能够回答我自己的问题,我希望这能有所帮助别人。
我的错误是我试图混合以编程方式和故事板设置的约束,但不确定为什么我不简单地设置 mapView 和框架 CGRect(gmapViewer.bounds.size.width/2, 0, gmapViewer.bounds.size.width/2, gmapViewer.bounds.size.height)
。
无论如何,下面的代码显示全屏 Google 街景视图,被半屏大小 Google 地图视图覆盖。
private let mapView = GMSMapView()
private let streetView = GMSPanoramaView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(streetView)
self.view.addSubview(mapView)
streetView.moveNearCoordinate(CLLocationCoordinate2D(latitude: 37.3317134, longitude: -122.0307466))
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
streetView.frame = CGRect(x: 0,
y: 0,
width: view.bounds.size.width,
height: view.bounds.size.height)
mapView.frame = CGRect(x: view.bounds.size.width/2,
y: 0,
width: view.bounds.size.width/2,
height: view.bounds.size.height)
}
我正在使用 Google 地图 SKD,我正在尝试制作适合 UIView
的地图。首先,我添加了一个全屏 UIView
,它在我的应用程序中显示了一个 PanoramaView。效果很好,这里是变量声明:
@IBOutlet weak var streetViewer: UIView!
@IBOutlet weak var gmapViewer: UIView!
var panoView: GMSPanoramaView!
var mapView: GMSMapView!
然后在 viewDiDLoad() 中创建全景图并将其添加为 streetViewer
:
panoView = GMSPanoramaView(frame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height))
panoView.delegate = self
panoView.moveNearCoordinate(CLLocationCoordinate2D(latitude: -33.732, longitude: 150.312))
streetViewer.addSubview(panoView)
streetViewer.sendSubviewToBack(panoView)
现在我正在尝试对 UIView
执行相同的操作,它覆盖大约一半的屏幕并在 panoView
层上显示 mapView
。我在这里创建地图,将其添加为 gmapViewer
的子视图,最后也将其添加为子视图并将其移动到 panoView
:
mapView = GMSMapView(frame: CGRectMake(0, 0, gmapViewer.bounds.size.width, gmapViewer.bounds.size.height))
mapView.delegate = self
gmapViewer.addSubview(mapView)
streetViewer.addSubview(gmapViewer)
panoView.sendSubviewToBack(gmapViewer)
我已经对所有 UIView
添加了约束。我还在 gmapViewer
中添加了一些折纸动画并且一切都很好,除了没有填充 gmapViewer
的地图。我认为问题出在 mapView = GMSMapView(frame: CGRectMake(0, 0, gmapViewer.bounds.size.width, gmapViewer.bounds.size.height))
但我无法理解什么不起作用,因为它适用于 panoView
.
在将近 5 年后发布这个,因为它让我觉得这个问题仍然没有答案,我认为我改进了足够的 iOS 程序员能够回答我自己的问题,我希望这能有所帮助别人。
我的错误是我试图混合以编程方式和故事板设置的约束,但不确定为什么我不简单地设置 mapView 和框架 CGRect(gmapViewer.bounds.size.width/2, 0, gmapViewer.bounds.size.width/2, gmapViewer.bounds.size.height)
。
无论如何,下面的代码显示全屏 Google 街景视图,被半屏大小 Google 地图视图覆盖。
private let mapView = GMSMapView()
private let streetView = GMSPanoramaView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(streetView)
self.view.addSubview(mapView)
streetView.moveNearCoordinate(CLLocationCoordinate2D(latitude: 37.3317134, longitude: -122.0307466))
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
streetView.frame = CGRect(x: 0,
y: 0,
width: view.bounds.size.width,
height: view.bounds.size.height)
mapView.frame = CGRect(x: view.bounds.size.width/2,
y: 0,
width: view.bounds.size.width/2,
height: view.bounds.size.height)
}