【发布时间】: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)
}
}
如果有人有任何信息可以分享,我将不胜感激。一个解决方案、一种变通方法,甚至只是一个大致的研究方向。
任何东西都会有所帮助。谢谢。
编辑:因为这可能很难用语言来解释,我已经录制了这个问题的视频。
如您所见,当盒子静止时,屏幕会旋转得很好,但如果它完全旋转,iOS 改变方向的动画会严重中断。
(另外,事后看来,在试图解释屏幕旋转问题时,旋转框并不是动画的最佳选择。框的动画无关紧要,而“旋转”我我有一个问题是设备屏幕改变方向。)
虽然视频显示得最好,但这里有一些屏幕截图试图传达问题。
没有动画:
带动画:
【问题讨论】: