翻转过渡动画后IBOutlet为零

时间:2019-03-29 13:24:01

标签: ios swift animation

我的两个视图的两个IBoutlet在那里,我正试图翻转。在UIView.transition之后,“ from” IBOutlet设置为nil,无法找出造成这种情况的原因。

 @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 个答案:

答案 0 :(得分:2)

这是因为过渡完成后,“从”中的视图将从其超级视图中删除。

docs

中了解更多信息

当您将出口定义为弱点时,不再有保留对象,因此将其释放。

答案 1 :(得分:1)

如果您通读了文档:

  

默认情况下,fromView中的视图在视图层次结构中被toView中的视图替换。如果两个视图都已经属于视图层次结构,则可以在options参数中包含 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设置为弱,引用也会 变为空。