我正在使用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
并在mapView
层上显示panoView
。在这里,我创建地图,将其添加为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
。
答案 0 :(得分:1)
在将近 5 年之后发布这篇文章,因为它让我觉得这个问题仍然没有答案,我认为我已经改进了足够的 iOS 程序员,能够回答我自己的问题,我希望这对其他人有所帮助。
我的错误是我在尝试混合以编程方式和故事板设置的约束时搞砸了,不知道为什么我不简单地使用框架 CGRect(gmapViewer.bounds.size.width/2, 0, gmapViewer.bounds.size.width/2, gmapViewer.bounds.size.height)
设置 mapView。
无论如何,下面的代码显示了一个全屏的谷歌街景,被一个半屏大小的谷歌地图视图覆盖。
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)
}