无法在UIView

时间:2016-07-08 19:55:13

标签: swift google-maps uiview subview google-maps-sdk-ios

我正在使用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

1 个答案:

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