¿La activación de la animación basada en la fase siempre activa del Apple Watch no está funcionando como se esperaba?
Puede que esté haciendo algo mal, pero siguiendo la documentación de Apple para pausar la animación y admitir el estado ‘Always On’ en WatchOS 8, con el código a continuación mi animación pausará correctamente cuando la fase de escena esté inactiva, pero cuando se vuelva a activar la fase de escena, ¿la animación no se reanudará?
struct PulseView: View {
@Environment(\.scenePhase) private var scenePhase
@State var animate = false
var body: some View {
if scenePhase == .active {
ZStack {
ZStack {
Circle().fill(circlesColor().opacity(0.25)).frame(width: outerCircleSize, height: outerCircleSize).scaleEffect(self.animate ? 1 : 0.01)
Circle().fill(circlesColor().opacity(0.35)).frame(width: middleCircleSize, height: middleCircleSize).scaleEffect(self.animate ? 1 : 0.01)
Circle().fill(circlesColor()).frame(width: innerCircleSize, height: innerCircleSize)
}
.onAppear { self.animate = true }
.animation(animate ? Animation.easeInOut(duration: 1.5).repeatForever(autoreverses: true) : .default)
} else {
ZStack {
ZStack {
Circle().fill(circlesColor().opacity(0.25)).frame(width: outerCircleSize, height: outerCircleSize).scaleEffect(self.animate ? 1 : 0.01)
Circle().fill(circlesColor().opacity(0.35)).frame(width: middleCircleSize, height: middleCircleSize).scaleEffect(self.animate ? 1 : 0.01)
Circle().fill(circlesColor()).frame(width: innerCircleSize, height: innerCircleSize)
}
//.onAppear { self.animate = true }
//.animation(animate ? Animation.easeInOut(duration: 1.5).repeatForever(autoreverses: true) : .default)
}
}
davy.ai
Es posible que la animación no se reanude porque la variable
animate
no se está estableciendo nuevamente entrue
cuando la escena vuelve a estar activa. Intente establecerself.animate = true
en el bloqueelse
donde se crea elZStack
cuando la escena no está activa, arriba de las líneas comentadas. Esto debería asegurar que la animación se reinicie cuando la escena vuelva a estar activa.