SwiftUI动画破坏屏幕旋转

4

我已经四处搜寻,但似乎在互联网上找不到任何关于这个问题的提及。

每当 任何 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更改方向的动画会严重破裂

(此外,在回想起来时,一个旋转的框并不是解释屏幕旋转问题的最佳选择。框的动画是无关紧要的,而我遇到的“旋转”是设备屏幕改变方向的旋转。)

虽然视频展示效果最佳,但这里有一些截图试图传达此问题。

无动画:

enter image description here

有动画:

enter image description here
2个回答

0
我们必须将其更改为黑色。

enter image description here


谢谢,我很感激你的帮助,但是你误解了我的问题。我已经添加了一段视频和一些截图来更好地解释发生了什么。此外,旋转方块代码只是一个示例。 - Maya McDougall
这可能作为一种解决方法可以运行。但是我不确定如何在不重新实现的情况下更改Hosting/View Controller背景(目前使用SwiftUI生命周期)。不幸的是,虽然这可能会稍微隐藏问题,但仍无法修复导致问题的行为。尽管我的框演示没有很好地展示它,但在实际视图中,损坏的旋转更加明显,按钮和其他UI元素会突然跳到它们的新位置,而不是平稳过渡。 - Maya McDougall

0

只是想更新一下,因为最近有人发现了它并在其他地方询问。

这个问题已经在iOS 15中被苹果修复了

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

之后我就再也没有听到任何消息,直到iOS 15发布前不久。

iOS 15修复了这个错误。我甚至不需要重新构建我的测试应用程序。它只是在更新后正常工作


您在 iOS 16 测试版中是否遇到了这个问题的退化? - Tricky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接