我一直在尝试使用带有 rotation3DEffect 的动画过渡来实现应用程序中的条件视图。但是我在条件视图应该隐藏时看到了随机的鬼边缘。 请参阅示例代码和图像。有没有人见过类似的问题并知道问题是什么?作为一个单独但更小的问题,画布不会呈现插入过渡,但它在模拟器中运行良好。谢谢。
struct RotateView3DModifer: ViewModifier {
var angleDegrees: Double
func body(content: Content) -> some View {
content.rotation3DEffect(
Angle(degrees: angleDegrees),
axis: (x: 0.0, y: 1.0, z: 0.0) )
}
}
extension AnyTransition {
static var rotateInOut: AnyTransition {
let insertion = AnyTransition.modifier(
active: RotateView3DModifer(angleDegrees: -90),
identity: RotateView3DModifer(angleDegrees: 45) )
let removal = AnyTransition.modifier(
active: RotateView3DModifer(angleDegrees: 90),
identity: RotateView3DModifer(angleDegrees: 0) )
return AnyTransition.asymmetric(insertion: insertion, removal: removal)
}
}
struct ContentView: View {
@State var show: Bool = false
var body: some View {
VStack {
Button(
action: { withAnimation { show.toggle() }},
label: { Text("\(show ? "Showing" : "Hidden")") } )
VStack {
if (show) {
Rectangle()
.transition(.rotateInOut)
}
}
.frame(width: 100, height: 150)
}
}
}
答案 0 :(得分:0)
确认这是模拟器和画布的问题。实际设备上不会出现重影边缘。