Plutôt que d'en créer deux UIImageViews
, il semble logique de simplement changer la image
vue d'une vue. Si je fais cela, y a-t-il de toute façon un fondu / fondu croisé entre les deux images plutôt qu'un commutateur instantané?
ios
objective-c
swift
cocoa-touch
uiimageview
Josh Kahane
la source
la source
Réponses:
Edit: il y a une meilleure solution de @algal ci-dessous .
Une autre façon de procéder consiste à utiliser des transitions CAAnimation prédéfinies:
Consultez l'exemple de projet View Transitions d'Apple: https://developer.apple.com/library/content/samplecode/ViewTransitions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007411
la source
Cela peut être beaucoup plus simple en utilisant les nouvelles
UIKit animation
méthodes basées sur des blocs .Supposons que le code suivant se trouve dans le contrôleur de vue et que l'UIImageView que vous souhaitez dissoudre de manière croisée soit une sous-vue de self.view adressable via la propriété.Tout
self.imageView
ce dont vous avez besoin est:Terminé.
Et pour le faire dans Swift, c'est comme ça:
Swift 3, 4 et 5
la source
Pour Swift 3.0.1:
Référence: https://gist.github.com/licvido/bc22343cacfa3a8ccf88
la source
Oui, ce que vous dites est absolument correct et c'est la façon de le faire. J'ai écrit cette méthode et je l'utilise toujours pour fondre mon image. Je m'occupe
CALayer
de ça. Vous devez importer Core Animation pour cela.Vous pouvez faire le contraire pour Fade out une image. Après qu'il s'estompe. Vous venez de le supprimer de superview (ce qui est
UIImageView
).[imageView removeFromSuperview]
.la source
Vous pouvez également empaqueter la fonctionnalité de fondu d'entrée dans une sous-classe, de sorte que vous puissiez ensuite l'utiliser comme une UIImageView commune, comme dans l'exemple suivant:
Une implémentation possible suit.
Remarque: la façon dont vous implémentez réellement le fondu d'entrée dans la
setImage:
fonction peut changer et pourrait être l'un des autres excellents exemples décrits dans les autres réponses à cette question - créer un autre à la voléeUIImageView
comme je le fais ici pourrait être une surcharge inacceptable dans votre situation spécifique .IMMFadeImageView.h :
IMMFadeImageView.m :
Le code ci-dessus repose sur quelques hypothèses (y compris l'activation d'ARC dans votre projet XCode), est uniquement destiné à être une preuve de concept, et dans un souci de clarté et de concentration, il reste pertinent en omettant un code non lié important. Veuillez ne pas simplement le copier-coller aveuglément.
la source
J'avais besoin de la transition pour répéter indéfiniment. Il a fallu BEAUCOUP d'essais et d'erreurs pour celui-ci, mais j'ai finalement obtenu le résultat final que je recherchais. Il s'agit d'extraits de code permettant d'ajouter une animation d'image à un UIImageView dans un UITableViewCell.
Voici le code pertinent:
la source
Après avoir joué avec
UIView.transition()
et avoir eu des problèmes avec l'.transitionCrossDissolve
option (j'essayais d'animer des images changeant à l'intérieur d'une UIImageView et la transition s'est produite instantanément sans animation), j'ai découvert qu'il vous suffit d'ajouter une option supplémentaire qui vous permet d'animer les propriétés changeant à l'intérieur de la vue ( Swift 4.2 ):De plus: si vous avez des sous-vues sur votre imageView, elle sera également redessinée et cela pourrait empêcher l'animation. Par exemple, j'avais une sous-vue avec un flou sur mon imageView et dans ce cas, l'animation ne fonctionne pas. Je viens donc de changer ma hiérarchie de vue et de déplacer le flou vers sa propre vue et de le placer sur imageView.
la source
C'est, je pense, le moyen le plus court de le faire. Créez une animation UIView et validez-la sur votre imageView.
la source
En utilisant la
highlightedImage
propriété, cela peut être rendu un peu plus simple. Voici un exemple dans Swift 3. Commencez par définir à la fois l'image normale et surlignée:Et quand vous voulez changer entre ceux animés:
la source