0

Я пытаюсь изучить API Google Map API, и я создаю приложение, имеющее два UIViewController. Корень UIViewController загружает Google Street View Panorama, как показано ниже:Получение и сохранение положения PanoramaView перед изменением VC

@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, и я готов добавить кнопку «Назад», чтобы вернуться к первому. Использование segues отлично работает, но panoView всегда загружается в latitude: -33.732, longitude: 150.312, так как я его инициализировал. То, что я пытаюсь достичь, - это вернуться к длине последней панорамы, загруженной до перехода на второй VC, например:

viewDidLoad -> lat. x1, длинный. y1;

переход на другую панораму -> лат. x2, длинный. у2;

изменение UIViewController;

back to root VC, panorama lat. и долго. должен быть (x2, y2).

Использование метода didMoveToPanorama я могу получить panoID каждый раз при изменении PanoramaView, проблема заключается в его хранении при изменении VC. Могу ли я использовать NSUserDefaults или есть лучший способ? Вот код:

func panoramaView(view: GMSPanoramaView, didMoveToPanorama panorama: GMSPanorama?) { 
    panoID = panorama!.panoramaID 
} 

Обратите внимание, что метод didMoveToPanorama:nearCoordinate: не может быть использован, так как он вызывается только когда Panorama переместилась из-за moveNearCoordinate

На стороне записки, я отредактировали название потому что это вводит в заблуждение , и улучшенный пост с дополнительной информацией.

ответ

0

я нашел более простой способ достижения этого:

В главном .storyboard: Показать переход к "SecondViewController"

в SecondViewController.swift:

@IBAction func backToPreviousVC(sender: AnyObject) { 
    dismissViewControllerAnimated(true, completion: nil) 
} 

Этот способ viewDidLoad не вызывается, и он возвращается к последней просматриваемой панораме.

0

Что вы можете сделать, это хранить значения широты и долготы перед заменой контроллера, а затем восстановить их как-то вроде этого:

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 
} 
+0

Ty, но вот так я могу сохранить только статический lat/long, в то время как мне нужно сохранить последние до изменения VC. Я был неясно, может, простите, но английский не мой родной язык, теперь я отредактировал пост, предоставляя более точный запрос и больше кода. Если вам удастся исправить код, чтобы получить panoID или lat/long из последней загруженной панорамы, я могу отметить это как принятый ответ. –

+0

Я не думаю, что подача голоса - это хороший способ попросить о дальнейшей помощи ... Я согласен, что вы не поняли. – AnthoPak

+0

Не дал понизить голос, я оценил ваши усилия. Просто посмотри на моего представителя, до 15 я не могу подняться или спуститься. Удалив это, как только вы прочтете. :) –