【问题标题】:SwiftUI animations break screen rotationSwiftUI 动画打破屏幕旋转
【发布时间】:2021-02-02 07:24:47
【问题描述】:

我到处搜索,但我似乎在互联网上任何地方都找不到任何提及此问题的内容。

每当 任何 SwiftUI 动画播放时,屏幕旋转,方向改变动画就会中断。

我的视图并没有优雅地过渡到新的方向,而是捕捉到它们的最终位置,在渲染区域之外留下大量空白区域,同时播放 iOS 屏幕旋转动画的其余部分。

这在我的应用中非常明显,因为我有一个非白色的背景颜色和一个通常正在播放的动画。

我已经用我的常规代码、简化的测试视图以及从一些教程下载的一些示例代码进行了尝试,并且行为似乎总是存在。如果没有播放动画,则屏幕旋转正常。如果有动画,旋转就会中断,视图元素会猛拉到它们的最终位置。

有没有其他人经历过这种情况?我字面意思找不到任何地方提到这个问题,我什至不知道从哪里开始。

这是我制作的“简化测试视图”的示例。请原谅烦人的 VStack/Hstack/Spacer 组合,这只是用边缘到边缘的背景颜色填充屏幕的快速方法。

struct squareView: View {
    @State var rotationDegrees = 0.0
    
    var body: some View {
        VStack {
            Spacer()
            HStack {
                Spacer()
                Button(action: {
                    withAnimation(.linear(duration: 3)){
                        rotationDegrees += 180
                    }
                }){
                    Rectangle()
                        .fill(Color.white)
                        .cornerRadius(30)
                        .rotationEffect(.degrees(rotationDegrees))
                        .frame(width: 250, height: 250)
                }
                Spacer()
            }
            Spacer()
        }
        .background(Color.black).edgesIgnoringSafeArea(.all)
    }
}

如果有人有任何信息可以分享,我将不胜感激。一个解决方案、一种变通方法,甚至只是一个大致的研究方向。

任何东西都会有所帮助。谢谢。


编辑:因为这可能很难用语言来解释,我已经录制了这个问题的视频。

https://youtu.be/UejK_MTY4Mw

如您所见,当盒子静止时,屏幕会旋转得很好,但如果它完全旋转,iOS 改变方向的动画会严重中断。

(另外,事后看来,在试图解释屏幕旋转问题时,旋转框并不是动画的最佳选择。框的动画无关紧要,而“旋转”我我有一个问题是设备屏幕改变方向。)

虽然视频显示得最好,但这里有一些屏幕截图试图传达问题。

没有动画:

带动画:

【问题讨论】:

    标签: ios animation swiftui


    【解决方案1】:

    我们必须把它改成黑色。

    【讨论】:

    • 谢谢,感谢您的帮助,但您误解了我的问题。我添加了一个视频和一些屏幕截图,以更好地解释正在发生的事情。此外,旋转框代码实际上只是作为示例显示。
    • 这可以作为一种解决方法。我不确定如何在不重新实现的情况下更改托管/视图控制器背景(目前使用 SwiftUI 生命周期)。不幸的是,虽然这可能会稍微隐藏问题,但它仍然无法修复导致它的行为。虽然我的盒子演示没有很好地展示它,但在实际视图中,损坏的旋转更加明显,按钮和其他 UI 元素突然跳到新位置而不是平滑过渡。
    【解决方案2】:

    只是想更新这个,因为最近似乎有人发现了它并且正在询问(其他地方)。

    Apple 在 iOS 15 中修复了此问题

    我向他们报告了这个问题,他们承认这是 SwiftUI 本身的一个错误。

    在那之后直到 iOS 15 发布之前我才听到任何消息。

    iOS 15 修复了这个错误。我什至不必重建我的测试应用程序。它只是在更新时工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      相关资源
      最近更新 更多