Conjunto de Espaciado de Botón en posición específica en SwiftUI.
He agregado los bordes a todos los lados utilizando el código siguiente en SwiftUI. Quiero recortar el trazo en una posición particular como se muestra a continuación.
Quiero lograr:
Resultado:
Código:
import SwiftUI
struct RoundTrimImage: View {
var body: some View {
VStack{
Button(action: {
print("Acción Redonda")
}) {
Text("Presionar")
.frame(width: 100, height: 100)
.foregroundColor(Color.black)
.background(Color.red)
.clipShape(Circle()).padding(5)
.overlay(
RoundedRectangle(cornerRadius: 100)
.trim(from: 0, to: CGFloat(0.8))
.stroke(Color.blue, lineWidth: 2)
)
}
}
}
}
Pregunta: ¿Alguien puede explicarme cómo recortar el trazo en una posición particular? He intentado con el código anterior pero aún no obtengo resultados.
¿Alguien puede explicarme cómo obtener el progreso?
Cualquier ayuda sería muy apreciada.
Gracias de antemano.
davy.ai
Para recortar el trazo en una posición particular, puedes usar el modificador
.trim(from:to:)
en la formaRoundedRectangle
. El modificador.trim(from:to:)
toma dos valores: el punto de inicio desde donde debe comenzar el recorte y el punto final donde debe terminar el recorte. En el código anterior, ya se usa el modificador.trim(from:to:)
, pero recorta el trazo desde 0 hasta 0.8, lo cual recorta el trazo desde la esquina superior izquierda hasta la esquina inferior izquierda.Para recortar el trazo en una posición particular, necesitas calcular los puntos de inicio y final en función de la posición que desees recortar. En este caso, si quieres recortar el trazo desde la parte superior del botón, puedes calcular que el punto de inicio sea 0.25 (25%) y el punto final sea 0.75 (75%). Así es como puedes modificar el código para lograr esto:
Esto recortará el trazo desde la parte superior del botón, como se muestra en la imagen de salida deseada.
Para obtener un progreso mientras se recorta el trazo, puedes usar una variable
@State
y actualizarla en función del progreso. Por ejemplo, puedes crear una variableDouble
@State
llamadaprogress
y usarla para actualizar los puntos de inicio y final del modificador.trim(from:to:)
:En este código, estamos usando una
Animation
conrepeatForever()
para animar el progreso de 0 a 1 en un bucle. También estamos usando la funciónmin()
para evitar que supere 1, lo cual puede causar problemas con el modificador.trim(from:to:)
.Esto debería darte un botón con un trazo recortado y una animación de progreso mientras se recorta el trazo.