En lugar de crear dos UIImageViews
, parece lógico simplemente cambiar el image
de una vista. Si hago eso, ¿hay alguna forma de disolver el fundido / cruce entre las dos imágenes en lugar de un cambio instantáneo?
ios
objective-c
swift
cocoa-touch
uiimageview
Josh Kahane
fuente
fuente
Respuestas:
Editar: hay una mejor solución de @algal a continuación .
Otra forma de hacerlo es mediante el uso de transiciones CAAnimation predefinidas:
Consulte el proyecto de ejemplo Ver transiciones de Apple: https://developer.apple.com/library/content/samplecode/ViewTransitions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007411
fuente
Puede ser mucho más simple usar los nuevos
UIKit animation
métodos basados en bloques .Suponga que el siguiente código está en el controlador de vista, y el UIImageView que desea disolver en forma cruzada es una subvista de self.view direccionable a través de la propiedad.
self.imageView
Entonces todo lo que necesita es:Hecho.
Y para hacerlo en Swift, es así:
Swift 3, 4 y 5
fuente
Para Swift 3.0.1:
Referencia: https://gist.github.com/licvido/bc22343cacfa3a8ccf88
fuente
Sí, lo que dices es absolutamente correcto y esa es la forma de hacerlo. Escribí este método y siempre lo uso para desvanecerse en mi imagen. Trato con
CALayer
esto. Necesita importar Core Animation para esto.Podrías hacer lo contrario para atenuar una imagen. Después de que se desvanece. Simplemente lo eliminas de la supervista (que es
UIImageView
).[imageView removeFromSuperview]
.fuente
También puede empaquetar la función de fundido de entrada en una subclase, para que luego pueda usarla como un UIImageView común, como en el siguiente ejemplo:
Sigue una posible implementación.
Nota: la forma en que realmente implementa el fundido de entrada en la
setImage:
función puede cambiar, y podría ser uno de los otros excelentes ejemplos descritos en las otras respuestas a esta pregunta; crear un sobre la marcha adicionalUIImageView
como lo estoy haciendo aquí podría Ser una sobrecarga inaceptable en su situación específica .IMMFadeImageView.h :
IMMFadeImageView.m :
El código anterior se basa en algunas suposiciones (incluida la habilitación de ARC en su proyecto XCode), solo pretende ser una prueba de concepto, y en aras de la claridad y el enfoque, sigue siendo relevante omitiendo código importante no relacionado. Por favor, no solo copie y pegue a ciegas.
fuente
Necesitaba que la transición se repitiera indefinidamente. Tomó MUCHA prueba y error para este, pero finalmente obtuve el resultado final que estaba buscando. Estos son fragmentos de código para agregar animación de imágenes a un UIImageView en un UITableViewCell.
Aquí está el código relevante:
fuente
Después de jugar
UIView.transition()
y tener problemas con la.transitionCrossDissolve
opción (estaba tratando de animar las imágenes que cambian dentro de un UIImageView y la transición se produjo instantáneamente sin animación) descubrí que solo necesita agregar una opción más que le permite animar las propiedades que cambian dentro de la vista ( Swift 4.2 ):Además: si tiene subvistas en su imageView, también se volverá a dibujar y podría evitar la animación. Por ejemplo, tenía una subvista con desenfoque en mi imageView y en ese caso la animación no funciona. Así que simplemente cambié mi jerarquía de vistas y moví el desenfoque a su propia vista y lo puse sobre imageView.
fuente
Esta es, creo, la forma más corta de hacerlo. Cree una animación UIView y comprométala en su imageView.
fuente
Al usar la
highlightedImage
propiedad, esto se puede hacer un poco más simple. Aquí hay un ejemplo en Swift 3. Primero configure la imagen normal y la resaltada:Y cuando quieras cambiar entre esos animados:
fuente