2016-05-30 2 views
1

Так я использую этот пакет GitHub: https://github.com/jakespracher/Snapchat-Swipe-ViewDetect, когда вид появляется на экране

И у меня есть проблема. viewDidLoad и viewDidAppear выполняется только один раз, когда приложение загрузилось. Как я могу запускать код каждый раз, когда на экране появляется let left = storyboard.instantiateViewControllerWithIdentifier("left")?

+1

Не могли бы вы уточнить, что вы подразумеваете запустить код каждый раз, когда вы создать экземпляр нового контроллера представления. Если вы просто хотите запускать код каждый раз, когда представление отображается пользователю, то, возможно, viewWillAppear или viewDidAppear - это то, что вам нужно? – Welton122

+0

'viewDidload' запускается только один раз, когда представление инициализируется. и 'viewdidAppear' запускается каждый раз после появления представления. – Lion

+0

@ Welton122 Как я уже говорил, 'viewDidAppear' запускается только один раз при использовании этого пакета Github. Если вы загрузите пакет Github и протестируете его, вы увидите, что он не запускается более одного раза. –

ответ

1

Я считаю, что метод viewWillAppear будет выполняться каждый раз. В противном случае вы можете использовать viewDidLayoutSubviews.

+0

Оба они работают только при загрузке приложения, но они не запускаются, если я перехожу к 'UIViewController', что код внутри. Я попытался добавить 'println (« Видимый »)', он отображается в окне журнала только тогда, когда приложение загружается, но не при смене и переходе 'UIViewControllers'. –

+0

@RoduckNickes, что относительно 'viewWillLayoutSubview'?Кстати, об этом уже упоминалось в Github. Надеюсь, скоро он будет исправлен. – penatheboss

+0

Я получаю ту же самую проблему для 'viewWillLayoutSubview'. Да, я вижу. Надеюсь, это исправится! –

0

Как вы говорите, каждый загруженный ViewController загружается, когда приложение загружается, изображение увеличивается, и вы просматриваете только просмотр контроллеров View. Поэтому вам не хватает преимуществ класса UIViewController. Лучше всего:

  1. Чтобы получить расположение экрана, установив property listeners в центре UIScrollView см Understanding UIScrollView.
  2. Установите таймер для изменения или распознавания касания.
  3. Используйте better project, и изменить его к вашим потребностям
1

Snapchat-Swipe-View загружает все viewControllers и мнения в Scrollview из SnapContainerViewController сразу.

Все viewControllers являются childViewController SnapContainerViewController.

поэтому

  1. все viewControllers будут получены viewDidLoad и viewDidAppear сразу

  2. технически все viewControllers уже на "появляются" состоянии, то он не будет "viewDidAppear" снова перед "viewDidDisappear"

  3. изменение пейджинга (переход на экран) может быть идентифицировано из события прокрутки.

Пример, чтобы определить, какие ViewController на экране (для горизонтального Scrollview с индексом 0, 1, 2) Аналогичной обработкой для вертикального Scrollview.

Просто добавьте следующий метод обратного вызова в SnapContainerViewController.swift

extension SnapContainerViewController: UIScrollViewDelegate { 
    func scrollViewDidEndDecelerating(scrollView: UIScrollView){ 
     let fullWidth = scrollView.frame.size.width 
     let pageNo: NSInteger = lround(Double(scrollView.contentOffset.x/fullWidth)) 

     print("page is shown:", pageNo) 
    } 
+0

Да, это сработало! На странице №3 у меня есть класс, связанный: Home.swift, как установить в этом контроллере код для запуска каждый раз, когда отображается контроллер вида? –

Смежные вопросы