带有显示隐藏动画的 UIView 翻转过渡 iOS

UIView flip transition with show hide animation iOS

我正在制作从一个 UIView 到另一个隐藏的动画。 代码:

UIView.transition(from: mediumFirstView, to: mediumSecondView, 
                  duration: 0.5, options: [.transitionFlipFromRight, 
                                           .showHideTransitionViews]) { _ in
    self.mediumFirstView.isUserInteractionEnabled = false
    self.mediumSecondView.isUserInteractionEnabled = true
}

或者这个:

UIView.transition(with: mediumLimitedView, duration: 0.5, 
                  options: [.transitionFlipFromRight, 
                            .showHideTransitionViews], 
                  animations: {
    self.mediumFirstView.alpha = 0
    self.mediumSecondView.alpha = 1
}) { _ in
    self.mediumFirstView.isUserInteractionEnabled = false
    self.mediumSecondView.isUserInteractionEnabled = true
}

两者的问题是 First UIView 只有在完整的翻转动画之后才会隐藏,而不是像预期的那样隐藏一半。难道我做错了什么?

视图层次结构:

如果你想为可见性设置动画

UIView.transition(with: mediumLimitedView, duration: 0.5, 
                  options: [.transitionFlipFromRight, 
                            .showHideTransitionViews], 
                  animations: {
    self.mediumFirstView.alpha = 0
    self.mediumSecondView.alpha = 1
}) { _ in
    self.mediumFirstView.isHidden = true
    self.mediumSecondView.isHidden = false
    self.mediumFirstView.isUserInteractionEnabled = false
    self.mediumSecondView.isUserInteractionEnabled = true
}

如果您只需要更新 isHidden - 您可以设置 t/2 秒的计划操作(在您的情况下,t 是 0.5s 秒,所以 t/2 = 0.25s

DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
            [weak self] in
            guard let strongSelf = self else{
                return
            }
            strongSelf.mediumFirstView.isHidden = true
            strongSelf.mediumSecondView.isHidden = false
        }

他们两个都对我有用。只需替换 mediumFirstViewmediumSecondView location.

UIView.transition(from: mediumSecondView, to: mediumFirstView, 
              duration: 5.5, options: [.transitionFlipFromRight, 
                                       .showHideTransitionViews]) { _ in
    self.mediumFirstView.isUserInteractionEnabled = false
    self.mediumSecondView.isUserInteractionEnabled = true
}