Je veux fondre un UIVisualEffectsView avec un UIBlurEffect entrant et sortant:
var blurEffectView = UIVisualEffectView()
blurEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
J'utilise une animation normale dans une fonction appelée par a UIButton
pour la fondre, idem pour le fondu mais .alpha = 0
& hidden = true
:
blurEffectView.hidden = false
UIView.animate(withDuration: 1, delay: 0, options: .curveEaseOut) {
self.blurEffectView.alpha = 1
}
Maintenant, la décoloration dans les deux sens fonctionne , mais il me donne une erreur lors de la décoloration sur :
<UIVisualEffectView 0x7fdf5bcb6e80>
est invité à animer son opacité. Cela fera apparaître l'effet interrompu jusqu'à ce que l'opacité revienne à 1.
Question
Comment réussir à fondre l'entrée UIVisualEffectView
et la sortie sans le casser et avoir une transition de fondu?
Remarque
- J'ai essayé de mettre le
UIVisualEffectView
dans unUIView
et de fondre celui-là, sans succès
ios
swift
fade
uiblureffect
uivisualeffectview
LinusGeffarth
la source
la source
Réponses:
Je pense que c'est nouveau dans iOS9, mais vous pouvez maintenant définir l'effet d'un
UIVisualEffectView
bloc d'animation à l'intérieur d'un:Réglez-le sur
nil
pour supprimer.TRÈS IMPORTANT - Lorsque vous testez cela sur le simulateur, assurez-vous de régler le remplacement de la qualité graphique de votre simulateur sur Haute qualité pour que cela fonctionne.
la source
La documentation Apple indique (actuellement) ...
et
Je pense qu'il manque ici un contexte important ...
Je suggérerais que l'intention est d'éviter les valeurs alpha inférieures à 1 pour une vue persistante. À mon humble avis, cela ne s'applique pas à l'animation d'une vue.
Mon point - je suggère que les valeurs alpha inférieures à 1 sont acceptables pour les animations.
Le message du terminal indique:
En lisant attentivement ceci, l'effet semblera rompu. Mes points à ce sujet étant:
UIVisualEffect
avec une valeur alpha inférieure à 1 ne sera pas présentée comme prévu / conçu par Apple; etPour étendre la réponse de @ jrturton ci-dessus qui m'a aidé à résoudre mon problème, j'ajouterais ...
Pour disparaître,
UIVisualEffect
utilisez le code (Objective-C) suivant:J'utilise avec succès les deux méthodes: définir la
effect
propriété surnil
et définir laalpha
propriété sur0
.Notez que le réglage de
effect
surnil
crée un "joli flash" (faute d'une meilleure description) à la fin de l'animation, tandis que le réglage dealpha
sur0
crée une transition douce.(Faites-moi savoir toute erreur de syntaxe ... j'écris en obj-c.)
la source
Voici la solution que j'ai trouvée qui fonctionne à la fois sur iOS10 et les versions antérieures en utilisant Swift 3
Vous pouvez également consulter cet essentiel pour trouver un exemple d'utilisation.
la source
UIViewPropertyAnimator
est la seule chose qui semble fonctionner sous iOS 11. Merci pour cela!Juste une solution de contournement - mettez
UIVisualEffectView
dans une vue de conteneur et modifiez laalpha
propriété de ce conteneur. Cette approche fonctionne parfaitement pour moi sur iOS 9. Il semble que cela ne fonctionne plus sous iOS 10.la source
Vous pouvez modifier l'alpha de la vue des effets visuels sans aucun problème, autre que l'avertissement dans la console. La vue peut apparaître comme simplement partiellement transparente, plutôt que floue. Mais ce n'est généralement pas un problème si vous ne faites que changer l'alpha pendant l'animation.
Votre application ne va pas planter ou être rejetée pour cela. Testez-le sur un vrai appareil (ou huit). Si vous êtes satisfait de son apparence et de ses performances, tout va bien. Apple vous avertit simplement qu'il peut ne pas avoir l'air ou fonctionner aussi bien qu'une vue d'effets visuels avec une valeur alpha de 1.
la source
Vous pouvez prendre un instantané d'une vue sous-jacente statique et l'afficher en fondu sans toucher à l'opacité de la vue floue. En supposant un ivar de flouView:
la source
Si vous voulez fondre dans votre UIVisualEffectView - pour ios10 utilisez UIViewPropertyAnimator
alors vous pouvez définir le pourcentage
pour ios9, vous pouvez utiliser le composant alpha
la source
L'alpha de l'UIVisualEffectView doit toujours être 1. Je pense que vous pouvez obtenir l'effet en définissant l'alpha de la couleur d'arrière-plan.
Source: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIVisualEffectView/index.html
la source
colorWithAlphaComponent:
méthode sur lesUIColor
instances. Vous ne savez pas comment obtenir le même effet en définissant la couleur d'arrière-plan.Je crée un uiview dont l'alpha est 0 et j'ajoute blurview en tant que sous-vue. Ainsi, je peux masquer / afficher ou arrondir les coins avec une animation.
la source
J'ai fini avec la solution suivante, en utilisant des animations séparées pour le
UIVisualEffectView
et le contenu. J'ai utilisé laviewWithTag()
méthode pour obtenir une référence à l'UIView
intérieur du fichierUIVisualEffectView
.Je préférerais que l'animation unique change l'alpha, mais cela évite l'erreur et semble fonctionner aussi bien.
la source
Je viens d'avoir ce problème et la façon dont je l'ai contourné était de loger l'UIVisualEffectsView dans un UIView et d'animer l'alpha de cet UIView.
Cela a bien fonctionné, sauf que dès que l'alpha a changé en dessous de 1.0, il est devenu un blanc uni et a l'air très discordant. Pour contourner ce problème, vous devez définir la propriété de couche de l'UIView
containerView.layer.allowsGroupOpacity = false
et cela l'empêchera de clignoter en blanc.Vous pouvez maintenant animer / fondre UIView contenant la vue des effets visuels et toutes les autres sous-vues en utilisant sa propriété alpha sans avoir à vous soucier des problèmes graphiques ou de la journalisation d'un message d'avertissement.
la source
Pour changer l'alpha de UIVisualEffectView, vous devez changer le contentView de _visualEffectView.Si vous changez l'alpha de _visualEffectView, vous obtiendrez ceci
la source
Habituellement, je souhaite animer un flou uniquement lorsque je présente un contrôleur de vue sur l'écran et que je souhaite brouiller le contrôleur de vue de présentation. Voici une extension qui ajoute blur () et unblur () à un contrôleur de vue afin de faciliter cela:
Vous pouvez bien sûr rendre cela plus robuste en laissant l'utilisateur choisir le style d'effet, modifier la durée, appeler quelque chose lorsque l'animation est terminée, marquer la vue d'effet visuel ajouté dans blur () pour vous assurer que c'est le seul supprimé lorsque vous débloquez ( ), etc., mais je n'ai pas trouvé le besoin de faire ces choses jusqu'à présent, car cela a tendance à être un type d'opération "feu et oublie".
la source
basé sur la réponse de @ cc, j'ai modifié son extension pour brouiller une vue
la source
Amélioration de la réponse @ Tel4tel et @cc, voici une extension avec des paramètres et une brève explication.
Ensuite, vous pouvez l'utiliser comme:
view.blur(duration: 5.0, effect: .light)
ouview.unblur(duration: 3.0)
N'oubliez pas de NE PAS l'utiliser
viewDidLoad()
car cela remplacera l'animation. De plus, lors de l'exécution sur un simulateur, placez les graphiques au niveau supérieur pour pouvoir voir l'animation (Débogage> Remplacement de la qualité graphique> Haute qualité).la source