在更改之前获取和存储 PanoramaView 的位置 VC
Getting and storing position of PanoramaView before changing VC
我正在尝试学习 Google 地图 API,并且我正在构建一个包含两个 UIViewController
的应用程序。根 UIViewController
加载 Google 街景全景图,如下所示:
@IBOutlet weak var viewStreet: UIView!
var panoView: GMSPanoramaView!
override func viewDidLoad() {
super.viewDidLoad()
let 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))
viewStreet.addSubview(panoView)
viewStreet.sendSubviewToBack(panoView)
}
我添加了一个 UIButton
来加载另一个 UIViewController
,我愿意添加一个 "Back" 按钮返回到第一个。使用 segues 它工作正常但 panoView
总是加载在 latitude: -33.732, longitude: 150.312
,因为我已经初始化了它。我想要实现的是在切换到第二个 VC 之前回到最后一个加载的全景图的 lat/long,例如:
viewDidLoad -> 纬度。 x1,长。 y1;
移动到另一个全景图 -> 纬度。 x2,长。 y2;
改变UIViewController
;
回到根目录VC,全景纬度。和长。应该是 (x2, y2).
使用 didMoveToPanorama
方法,我可以在每次 PanoramaView 更改时获取 panoID,问题是在 VC 更改时存储它。我可以使用 NSUserDefaults
还是有更好的方法?这是代码:
func panoramaView(view: GMSPanoramaView, didMoveToPanorama panorama: GMSPanorama?) {
panoID = panorama!.panoramaID
}
请注意,方法 didMoveToPanorama:nearCoordinate:
无法使用,因为它仅在全景因 moveNearCoordinate
而移动时调用
附带说明一下,我编辑了标题,因为它具有误导性,并改进了 post 以提供更多信息。
您可以做的是在更改控制器之前存储纬度和经度值,然后将它们恢复为如下所示:
CGFloat latitudeSave;
CGFloat longitudeSave;
-(void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
latitudeSave = -33.732; //save current coordonates here (use panoView current values)
longitudeSave = 150.312;
}
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[panoView moveNearCoordinate:CLLocationCoordinate2D(latitude: latitudeSave, longitude: longitudeSave)]; //not sure of this line
}
我找到了实现此目的的更简单方法:
在 Main.storyboard 中:显示转至 "SecondViewController"
在SecondViewController.swift中:
@IBAction func backToPreviousVC(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
这样就不会调用 viewDidLoad,它会返回上次看到的全景图。
我正在尝试学习 Google 地图 API,并且我正在构建一个包含两个 UIViewController
的应用程序。根 UIViewController
加载 Google 街景全景图,如下所示:
@IBOutlet weak var viewStreet: UIView!
var panoView: GMSPanoramaView!
override func viewDidLoad() {
super.viewDidLoad()
let 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))
viewStreet.addSubview(panoView)
viewStreet.sendSubviewToBack(panoView)
}
我添加了一个 UIButton
来加载另一个 UIViewController
,我愿意添加一个 "Back" 按钮返回到第一个。使用 segues 它工作正常但 panoView
总是加载在 latitude: -33.732, longitude: 150.312
,因为我已经初始化了它。我想要实现的是在切换到第二个 VC 之前回到最后一个加载的全景图的 lat/long,例如:
viewDidLoad -> 纬度。 x1,长。 y1;
移动到另一个全景图 -> 纬度。 x2,长。 y2;
改变UIViewController
;
回到根目录VC,全景纬度。和长。应该是 (x2, y2).
使用 didMoveToPanorama
方法,我可以在每次 PanoramaView 更改时获取 panoID,问题是在 VC 更改时存储它。我可以使用 NSUserDefaults
还是有更好的方法?这是代码:
func panoramaView(view: GMSPanoramaView, didMoveToPanorama panorama: GMSPanorama?) {
panoID = panorama!.panoramaID
}
请注意,方法 didMoveToPanorama:nearCoordinate:
无法使用,因为它仅在全景因 moveNearCoordinate
附带说明一下,我编辑了标题,因为它具有误导性,并改进了 post 以提供更多信息。
您可以做的是在更改控制器之前存储纬度和经度值,然后将它们恢复为如下所示:
CGFloat latitudeSave;
CGFloat longitudeSave;
-(void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
latitudeSave = -33.732; //save current coordonates here (use panoView current values)
longitudeSave = 150.312;
}
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[panoView moveNearCoordinate:CLLocationCoordinate2D(latitude: latitudeSave, longitude: longitudeSave)]; //not sure of this line
}
我找到了实现此目的的更简单方法:
在 Main.storyboard 中:显示转至 "SecondViewController"
在SecondViewController.swift中:
@IBAction func backToPreviousVC(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
这样就不会调用 viewDidLoad,它会返回上次看到的全景图。