【问题标题】:UIView flip transition with show hide animation iOSUIView翻转过渡与显示隐藏动画iOS
【发布时间】:2019-01-16 13:12:40
【问题描述】:

我正在制作从一个 UIView 到另一个 UIView 的翻转动画,它位于第一个 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 仅在翻转完整动画后才隐藏,而不是预期的一半。难道我做错了什么?

视图层次结构:

【问题讨论】:

    标签: ios swift animation transition flip


    【解决方案1】:

    它们都对我有用。只需替换 mediumFirstViewmediumSecondView 位置即可。

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

    【讨论】:

    • 我正在尝试从第一个交换到第二个。您的代码已替换它们并且不起作用。是我做错了什么,还是您没有正确回答问题?
    • @Erumaru 你能上传图片或gif的动画吗?我不知道你到底想要什么。
    • mediumSecondView 被隐藏并放置在 mediumFirstView 后面,我想将 mediumFirstView 翻转到 mediumSecondView,但我的问题是,当我通过上面的代码执行此操作时,mediumSecondView 仅在完整动画后才可见,而不是一半预计。
    • 您能否分享给定解决方案的视图层次结构?另外,请分享视图预设(isHidden)。
    • @Erumaru 好的。我补充说。我还在我的绿色视图中添加了 UITapGestureRecognizer 来测试它。
    【解决方案2】:

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

    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
            }
    

    【讨论】:

    • 你检查你的答案了吗?两个都不行。
    • 当然,我为我的一个项目实现了这一点。尝试延长持续时间以获得更好的调试
    • 这两件事都按照我的解释进行,仅在完整动画后而不是一半时才交换视图。什么可能导致此问题?
    • 自动布局会导致这个问题吗?
    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多