Descubre opciones avanzadas de las animaciones de SFSymbols
Marcelo Laprea
12 julio, 20233min de lectura
Ya descubrimos como animar los SFSymbols gracias al modificador symbolEffect(_:options:value:)
. Veamos que otras opciones tenemos para las animaciones.
Definiendo los SymbolEffectOptions
Podemos definir en el modificador symbolEffect(_:options:value:)
las opciones SymbolEffectOptions
, que son opciones de configuración de como los efectos son aplicados a los iconos.
repeat(_ count: Int)
.speed(_ speed: Double)
.nonRepeating
.repeating
.
Veamos cada uno de ellos:
repeat(_ count: Int)
:
Luego de definir el tipo de animación, definimos la opción de repeat
con la cantidad de veces que queremos que se repita la animación. Veamos un ejemplo:
struct ContentView: View {@State var cart: Int = 0var body: some View {VStack(spacing: 13) {Image(systemName: "cart").symbolEffect(.bounce,options: .repeat(2),value: cart).font(.system(size: 30))Button("Añadir producto") {cart += 1}}}}
speed(_ speed: Double)
:
Definimos el multiplicador para aumentar o disminuir la velocidad de la animación. El valor por defecto del multiplicador es 1.0. Veamos un ejemplo:
struct ContentView: View {var body: some View {VStack(spacing: 18) {Image(systemName: "magnifyingglass").symbolEffect(.pulse,options: .speed(2.0)).font(.system(size: 30))}}}
nonRepeating
:
Podemos definir que una animación no se repita al colocar la opción nonRepeating
. Por ejemplo, el tipo de animación .pulse
es de tipo Indefinite, es decir, que se repetirá hasta que se le indique, pero si definimos la animación con la opción nonRepeating
, solo animará una vez. Veamos un ejemplo:
struct ContentView: View {var body: some View {VStack(spacing: 18) {Image(systemName: "magnifyingglass").symbolEffect(.pulse,options: .nonRepeating).font(.system(size: 30))}}}
repeating
:
Caso contrario a nonRepeating
, en el cual definimos esta opción si queremos que la animación se repita indefinidamente. Veamos un ejemplo:
struct ContentView: View {@State var cart: Int = 0var body: some View {VStack(spacing: 13) {Image(systemName: "cart").symbolEffect(.bounce,options: .repeating,value: cart).font(.system(size: 30))Button("Añadir producto") {cart += 1}}}}
Usando SFSymbols app
Con la aplicación de SFSymbols 5.0 Beta, que podemos descargarla aquí, vamos a poder previsualizar las animaciones y copiar el código con la animación que queramos. Veamos como:
- Abrimos la aplicación.
- Seleccionamos un icono.
- En el menú ubicado a la derecha, vamos a seleccionar la opción de Animation Inspector.
- Podemos configurar la animación con las diferentes opciones, y previsualizar la animación.
- Le damos al botón copiar, copy configuration for Swift, siendo este el resultado:
.variableColor.cumulative.dimInactiveLayers.nonReversing
. Ahora lo copiamos en el tipo de symbolEffect de la siguiente forma.
struct ContentView: View {var body: some View {VStack(spacing: 13) {Image(systemName: "wifi").symbolEffect(.variableColor.cumulative.dimInactiveLayers.nonReversing).font(.system(size: 40))}}}
Gracias a la aplicación de SFSymbols, podemos ahorrar tiempo a la hora de configurar la animación que queremos en nuestra app.