Mi objetivo simple es desvanecer las funciones de ocultar y mostrar animadas.
Button.hidden = YES;
Suficientemente simple. Sin embargo, ¿es posible que desaparezca en lugar de desaparecer? Parece bastante poco profesional de esa manera.
fuente
Mi objetivo simple es desvanecer las funciones de ocultar y mostrar animadas.
Button.hidden = YES;
Suficientemente simple. Sin embargo, ¿es posible que desaparezca en lugar de desaparecer? Parece bastante poco profesional de esa manera.
En iOS 4 y versiones posteriores, hay una manera de hacer esto simplemente usando el método de transición UIView sin necesidad de importar QuartzCore. Solo puedes decir:
[UIView transitionWithView:button
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
button.hidden = YES;
}
completion:NULL];
UIView.transition(with: button, duration: 0.4,
options: .transitionCrossDissolve,
animations: {
button.hidden = false
})
La solución de Michail funcionará, pero en realidad no es el mejor enfoque.
El problema con el desvanecimiento alfa es que a veces las diferentes capas de vista superpuestas se ven extrañas a medida que se desvanecen. Hay algunas otras alternativas que usan Core Animation. Primero incluya el marco QuartzCore en su aplicación y agréguelo #import <QuartzCore/QuartzCore.h>
a su encabezado. Ahora puede hacer uno de los siguientes:
1) establezca button.layer.shouldRasterize = YES;
y luego use el código de animación alfa que Michail proporcionó en su respuesta. Esto evitará que las capas se mezclen extrañamente, pero tiene una ligera penalización de rendimiento y puede hacer que el botón se vea borroso si no está alineado exactamente en un límite de píxeles.
Alternativamente:
2) Use el siguiente código para animar el desvanecimiento en su lugar:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];
button.hidden = YES;
Lo bueno de este enfoque es que puede hacer un fundido cruzado de cualquier propiedad del botón, incluso si no son animables (por ejemplo, el texto o la imagen del botón), simplemente configure la transición y luego configure sus propiedades inmediatamente después.
transitionWithView
parámetro para garantizar un fundido de entrada y salida exitoso.Las propiedades animadas de UIView son:
isHidden
no es uno de ellos, así que, según veo, la mejor manera es:Swift 4:
C objetivo:
fuente
Para desvanecerse:
C objetivo
Swift 2
Swift 3, 4, 5
Para desvanecerse en:
C objetivo
Swift 2
Swift 3, 4, 5
fuente
Yo uso esta pequeña extensión de Swift 3 :
fuente
Swift 3
fuente
swift 4.2
con extensión:
método simple:
fuente
Use esta solución para obtener efectos suaves de fadeOut y fadeIn
el uso es como
Gracias
fuente
fadeOut
funciona en iOS 13 solo si elimino las líneas que establecenself.isHidden
.He creado una categoría para
UIView
este fin y puso en práctica un poco especial poco diferente concepto:visibility
. La principal diferencia de mi solución es que puede llamar[view setVisible:NO animated:YES]
y justo después de eso verificar sincrónicamente[view visible]
y obtener el resultado correcto. Esto es bastante simple pero extremadamente útil.Además, se permite evitar el uso de "lógica booleana negativa" (consulte Código completo, página 269, Usar nombres de variable booleana positiva para obtener más información).
Rápido
UIView+Visibility.swift
C objetivo
UIView+Visibility.h
UIView+Visibility.m
fuente
El código de @Umair Afzal funciona bien en Swift 5 después de algunos cambios
para usar
fuente
Swift 4
Y para usarlo, simplemente llame a estas funciones como:
fuente
isHidden
es un valor inmediato y no puede afectar una animación en él, en lugar de esto puede usar Alpha para ocultar su vistaY por mostrar:
fuente
Puedes hacerlo MUY fácilmente usando la biblioteca Animatics :
fuente
fuente
Puedes probar esto.
Y pasa tu nombre de vista
fuente
Si su vista está configurada como oculta de manera predeterminada o si cambia el estado Oculto, lo que creo que debería hacer en muchos casos, ninguno de los enfoques en esta página le proporcionará animación FadeIn / FadeOut, solo animará uno de estos estados, la razón es que está configurando el estado Oculto en falso antes de llamar al método UIView.animate , lo que causará una visibilidad repentina y si solo anima el alfa, el espacio del objeto todavía está allí, pero no es visible, lo que provocará algunos problemas de IU.
Entonces, el mejor enfoque es verificar primero si la vista está oculta y luego establecer el alfa en 0.0, de esta manera cuando establece el estado Oculto en falso, no verá una visibilidad repentina.
fuente
UIView.transition (con :) la función es agradable y ordenada.
Muchos lo han publicado, pero ninguno se ha dado cuenta de que existe una falla que se mostrará solo cuando lo ejecute.
Puede pasar la propiedad oculta a verdadero perfectamente, mientras que cuando intente hacer la transición a falso, la vista simplemente desaparecerá repentinamente sin ninguna animación.
Esto se debe a que esta API solo funciona dentro de una vista, lo que significa que cuando hace la transición de una vista para mostrar, de hecho, se muestra de inmediato, solo su contenido se anima gradualmente.
Cuando intenta ocultar esta vista, se oculta de inmediato, hace que la animación de su contenido no tenga sentido.
Para resolver esto, al ocultar una vista, el objetivo de transición debe ser su vista principal en lugar de la vista que desea ocultar.
fuente
Mi solución para Swift 3 . Entonces, creé la función, que oculta / muestra la vista en el orden correcto (cuando se oculta, establece alfa en 0 y luego se oculta en verdadero; oculta: primero revela la vista y luego establece su alfa en 1):
fuente
completion
bloque hay otra animación cuandohide
es falsa?Transición Swift 4
Si utiliza el enfoque para versiones rápidas anteriores, obtendrá un error:
Útil de referencia .
fuente
isHidden
valor se representa instantáneamente (es decir, ocultando / mostrando instantáneamente la vista).fuente
Intenté algunas de las respuestas salidas, algunas solo funcionan para una situación, algunas de ellas necesitan agregar dos funciones.
Opción 1
Nada que ver con
view.isHidden
.Luego pasa
isFadeIn
(true
ofalse
)opcion 2
No pase ningún parámetro. Se desvanece dentro o fuera de acuerdo con
isUserInteractionEnabled
. Esto también se adapta muy bien a la situación animada de un lado a otro.Entonces llamas
Eso es. Me costó alguna vez, espero que ayude a alguien.
fuente