IBOutlet равен нулю после анимации флип-перехода - PullRequest
0 голосов
/ 29 марта 2019

Есть два моих IBoutlet из двух представлений, которые я пытаюсь перевернуть. После UIView.transition IBOutlet "from" устанавливается в ноль, не в состоянии выяснить причину этого.

 @IBOutlet weak var showingSideView: shadowView!
 @IBOutlet weak var hiddenSideView: shadowView!

 UIView.transition(from: showingSideView, to: hiddenSideView, duration: 0.7, options: transitionDirection) { (isFlipped) in

            self.showingBack = !self.showingBack
}

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Это потому, что ваше представление в "from" будет удалено из его суперпредставления после завершения перехода.

Подробнее в документах

Поскольку вы определили свою точку выхода как слабую, удерживающего объекта больше нет, поэтому он освобождается.

1 голос
/ 29 марта 2019

Если вы прочитали документацию:

По умолчанию представление в fromView заменяется в иерархии представлений представлением в toView. Если оба представления уже являются частью вашей иерархии представлений, вы можете включить параметр showHideTransitionViews в параметре параметров, чтобы просто скрыть или показать их.

Итак, чтобы сохранить ваши представления в иерархии, добавьте эту опцию:

@IBOutlet var showingSideView: shadowView!
@IBOutlet var hiddenSideView: shadowView!

UIView.transition(from: showingSideView, 
                    to: hiddenSideView, 
              duration: 0.7, 
               options: [.transitionFlipFromLeft, .showHideTransitionViews]) 
              { (isFlipped) in
                  self.showingBack = !self.showingBack
              }

Редактировать:

Только для уточнения ...

Apple теперь рекомендует НЕ использовать weak для @IBOutlets, но это не влияет на проблему здесь. При использовании .showHideTransitionViews ссылка не станет нулевой, даже если для @IBOutlets задано слабое значение.

...