我已经四处搜寻,但似乎在互联网上找不到任何关于这个问题的提及。
每当 任何 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](https://istack.dev59.com/lp3tB.webp)
有动画:
![enter image description here](https://istack.dev59.com/i6LPx.webp)