Dans l'application Musique du nouvel iOS, nous pouvons voir une couverture d'album derrière une vue qui la brouille.
Comment accomplir quelque chose comme ça? J'ai lu la documentation, mais je n'y ai rien trouvé.
ios
objective-c
graphics
filtering
core-image
kondratyevdev
la source
la source
Réponses:
Vous pouvez utiliser
UIVisualEffectView
pour obtenir cet effet. Il s'agit d'une API native qui a été optimisée pour les performances et la durée de vie de la batterie, en plus d'être facile à mettre en œuvre.Rapide:
Objectif c:
Si vous présentez ce contrôleur de vue de manière modale pour brouiller le contenu sous-jacent, vous devrez définir le style de présentation modale sur Over Current Context et définir la couleur d'arrière-plan pour effacer pour vous assurer que le contrôleur de vue sous-jacent restera visible une fois qu'il sera présenté au-dessus.
la source
insertSubView:belowSubView:
commentaire de ce code, j'ai utilisé ce qui suit pour définir le flou comme arrière-plan de la vue:view.insertSubview(blurEffectView, atIndex: 0)
UIAccessibilityIsReduceTransparencyEnabled()
.Image de base
Étant donné que cette image dans la capture d'écran est statique, vous pouvez utiliser à
CIGaussianBlur
partir de Core Image (nécessite iOS 6). Voici un exemple: https://github.com/evanwdavis/Fun-with-Masks/blob/master/Fun%20with%20Masks/EWDBlurExampleVC.mAttention, c'est plus lent que les autres options de cette page.
Flou de la pile (boîte + gaussien)
Accélérer le cadre
Dans la session «Implémentation de l'interface utilisateur engageante sur iOS» de la WWDC 2013, Apple explique comment créer un arrière-plan flou (à 14h30) et mentionne une méthode
applyLightEffect
implémentée dans l'exemple de code à l'aide d'Accelerate.framework.GPUImage utilise des shaders OpenGL pour créer des flous dynamiques. Il a plusieurs types de flou: GPUImageBoxBlurFilter, GPUImageFastBlurFilter, GaussianSelectiveBlur, GPUImageGaussianBlurFilter. Il existe même un GPUImageiOSBlurFilter qui «devrait reproduire pleinement l'effet de flou fourni par le panneau de configuration d'iOS 7» ( tweet , article ). L'article est détaillé et informatif.
Depuis indieambitions.com: effectuez un flou à l'aide de vImage . L'algorithme est également utilisé dans iOS-RealTimeBlur .
De Nick Lockwood: https://github.com/nicklockwood/FXBlurView L'exemple montre le flou sur une vue de défilement. Il se brouille avec dispatch_async, puis se synchronise pour appeler les mises à jour avec UITrackingRunLoopMode afin que le flou ne soit pas retardé lorsque UIKit donne plus de priorité au défilement de l'UIScrollView. Cela est expliqué dans le livre de Nick, iOS Core Animation , qui est génial.
iOS-blur Cela prend la couche de flou de la barre d'outils UIT et la place ailleurs. Apple rejettera votre application si vous utilisez cette méthode. Voir https://github.com/mochidev/MDBlurView/issues/4
Du blog Evadne: LiveFrost : Convolution rapide et synchrone d'instantanés UIView . Excellent code et bonne lecture. Quelques idées de ce post:
D'autres choses
Andy Matuschak a déclaré sur Twitter: "vous savez, beaucoup d'endroits où il semble que nous le faisons en temps réel, c'est statique avec des astuces intelligentes."
Sur doubleencore.com, ils disent «nous avons constaté qu'un rayon de flou de 10 pt plus une augmentation de 10 pt de la saturation imite mieux l'effet de flou d'iOS 7 dans la plupart des circonstances».
Un aperçu des en-têtes privés du SBFProceduralWallpaperView d'Apple .
Enfin, ce n'est pas un vrai flou, mais n'oubliez pas que vous pouvez définir rasterizationScale pour obtenir une image pixellisée: http://www.dimzzy.com/blog/2010/11/blur-effect-for-uiview/
la source
UIImage
sinon il va paraître beaucoup trop gros sur un appareil Retina ...J'ai décidé de publier une version écrite d'Objective-C à partir de la réponse acceptée juste pour fournir plus d'options dans cette question.
Les contraintes pourraient être supprimées si vous voulez incase si vous ne supportez que le mode portrait ou si j'ajoute juste un drapeau à cette fonction pour les utiliser ou non.
la source
Je ne pense pas que je suis autorisé à publier le code, mais l'article ci-dessus mentionnant l'exemple de code WWDC est correct. Voici le lien: https://developer.apple.com/downloads/index.action?name=WWDC%202013
Le fichier que vous recherchez est la catégorie sur UIImage, et la méthode est applyLightEffect.
Comme je l'ai noté ci-dessus dans un commentaire, l'Apple Blur a une saturation et d'autres choses en plus du flou. Un simple flou ne fera pas l'affaire ... si vous cherchez à imiter leur style.
la source
Voici une implémentation rapide dans Swift en utilisant CIGaussianBlur:
la source
Je pense que la solution la plus simple est de remplacer UIToolbar, qui brouille tout derrière iOS 7. C'est assez sournois, mais c'est très simple à mettre en œuvre et rapide!
Vous pouvez le faire avec n'importe quelle vue, faites-en simplement une sous-classe de
UIToolbar
au lieu deUIView
. Vous pouvez même le faire avec unUIViewController
laview
propriété a, par exemple ...1) créer une nouvelle classe qui est une "sous-classe de"
UIViewController
et cochez la case "Avec XIB pour l'interface utilisateur".2) Sélectionnez la vue et accédez à l'inspecteur d'identité dans le panneau de droite (alt-commande-3). Changez la "Classe" en
UIToolbar
. Allez maintenant dans l'inspecteur d'attributs (alt-commande-4) et changez la couleur "Arrière-plan" en "Couleur claire".3) Ajoutez une sous-vue à la vue principale et connectez-la à un IBOutlet dans votre interface. Appelez ça
backgroundColorView
. Il ressemblera à quelque chose comme ceci, comme une catégorie privée dans le.m
fichier implementation ( ).4) Accédez au
.m
fichier d' implémentation du contrôleur de vue ( ) et modifiez la-viewDidLoad
méthode, comme suit:Cela vous donnera une vue gris foncé, qui brouille tout derrière. Aucune entreprise amusante, aucun flou lent de l'image de base, en utilisant tout ce qui est à portée de main fourni par l'OS / SDK.
Vous pouvez ajouter la vue de ce contrôleur de vue à une autre vue, comme suit:
Faites-moi savoir si quelque chose n'est pas clair, je serai heureux de vous aider!
Éditer
UIToolbar a été modifié dans 7.0.3 pour donner un effet éventuellement indésirable lors de l'utilisation d'un flou coloré.
barTintColor
Auparavant, nous pouvions définir la couleur à l'aide , mais si vous le faisiez auparavant, vous devrez définir le composant alpha sur moins de 1. Sinon, votre UIToolbar sera de couleur complètement opaque - sans flou.Ceci peut être réalisé comme suit: (en gardant à l'esprit
self
une sous-classe deUIToolbar
)Cela donnera une teinte bleue à la vue floue.
la source
self.backgroundColorView.opaque = NO;
self.backgroundColorView.alpha = 0.5;
self.backgroundColorView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1];
mais l'arrière-plan n'est pas flou, faites juste un bel effet de sur. merci quand même!Échelle de flou personnalisée
Vous pouvez essayer
UIVisualEffectView
avec un paramètre personnalisé comme -Sortie: - pour
blurEffect.setValue(1...
&blurEffect.setValue(2..
la source
(NSClassFromString("_UICustomVibrancyEffect") as! UIVibrancyEffect.Type).init()
J'apprécierais vraiment de l'aide!Voici un moyen simple d'ajouter un flou personnalisé sans marchander avec des API privées à l'aide d' UIViewPropertyAnimator :
Tout d'abord, déclarez la propriété de classe:
Ensuite, définissez votre vue floue dans
viewDidLoad()
:Remarque: Cette solution ne convient pas pour
UICollectionView
/UITableView
cellsla source
Depuis Xcode, vous pouvez le faire facilement. Suivez les étapes de xcode. Affichez l'effet visuel sur votre uiview ou imageview.
Happy Coding :)
la source
La réponse acceptée est correcte mais il manque une étape importante ici, au cas où cette vue - pour laquelle vous voulez un arrière-plan flou - est présentée à l'aide de
[self presentViewController:vc animated:YES completion:nil]
Par défaut, cela annulera le flou car UIKit supprime la vue du présentateur, que vous brouillez réellement. Pour éviter cette suppression, ajoutez cette ligne avant la précédente
vc.modalPresentationStyle = UIModalPresentationOverFullScreen;
Ou utilisez d'autres
Over
styles.la source
OBJECTIF C
SWIFT 3.0
à partir de: https://stackoverflow.com/a/24083728/4020910
la source
Utilisation d'UIImageEffects
Pour les personnes qui souhaitent plus de contrôle, vous pouvez utiliser l'
UIImageEffects
exemple de code d'Apple .Vous pouvez copier le code
UIImageEffects
de la bibliothèque des développeurs d'Apple: flou et teinte d'une imageEt voici comment l'appliquer:
la source
la source
J'ai trouvé cela par accident, me donne de très bons résultats (presque en double avec ceux d'Apple) et utilise le cadre d'accélération. - http://pastebin.com/6cs6hsyQ * Non écrit par moi
la source
Cette réponse est basée sur l'excellente réponse antérieure de Mitja Semolic . Je l'ai converti en swift 3, ajouté une explication à ce qui se passe dans coments, en ai fait une extension d'un UIViewController pour que n'importe quel VC puisse l'appeler à volonté, ajouté une vue non floue pour montrer une application sélective et ajouté un bloc de complétion afin que le contrôleur de vue appelant peut faire ce qu'il veut à la fin du flou.
J'ai confirmé que cela fonctionne avec iOS 10.3.1 et iOS 11
la source
Un complément important à la réponse de @ Joey
Cela s'applique à une situation où vous voulez présenter un arrière - plan flou
UIViewController
avecUINavigationController
.Prendre plaisir!
la source
Version Swift 3 de la réponse de Kev pour renvoyer une image floue -
la source
Code 2019
Voici un exemple plus complet utilisant l'incroyable technique @AdamBardon.
{À part: en général, l'ingénierie iOS
didMoveToWindow
peut vous convenir mieux quedidMoveToSuperview
. Deuxièmement, vous pouvez utiliser une autre méthode pour effectuer le démontage, mais le démontage correspond aux deux lignes de code qui y sont affichées.}BlurryBall
est juste unUIVisualEffectView
. Notez les inits pour une vue d'effets visuels. Si vous avez besoin de coins arrondis ou autre, faites-le dans cette classe.la source
Apple a fourni une extension pour la classe UIImage appelée UIImage + ImageEffects.h. Dans cette classe, vous avez les méthodes souhaitées pour brouiller votre vue
la source
Voici le code Swift 2.0 pour la solution qui a été fournie dans la réponse acceptée :
la source
Si ajoute une vue floue sombre pour tableView, cela le fera magnifiquement:
la source
Vous pouvez directement rendre votre arrière-plan flou en utilisant "Visual Effect View with Blur" et "Visual Effect View with Blur and Vibrancy".
Tout ce que vous avez à faire pour créer un arrière-plan flou dans une application iOS est ...
Étape 1 Image
Étape 2 Image
Présentation de l'application avant de cliquer sur un bouton!
Vue de l'application après avoir cliqué sur le bouton, ce qui rend l'arrière-plan de l'application flou!
la source
Dans le cas où cela aiderait quelqu'un, voici une extension rapide que j'ai créée sur la base de la réponse de Jordan H. Elle est écrite dans Swift 5 et peut être utilisée à partir de l'objectif C.
Remarque: si vous souhaitez flouter l'arrière-plan d'un UILabel sans affecter le texte, vous devez créer un conteneur UIView, ajoutez l'UILabel au conteneur UIView en tant que sous-vue, définissez backgroundColor du UILabel sur UIColor.clear, puis appelez blurBackground (style : UIBlurEffect.Style, fallbackColor: UIColor) sur le conteneur UIView. Voici un exemple rapide de cela écrit dans Swift 5:
la source
Swift 4:
Pour ajouter une superposition ou la vue contextuelle Vous pouvez également utiliser la vue conteneur avec laquelle vous obtenez un contrôleur de vue gratuit (vous obtenez la vue conteneur à partir de la palette / bibliothèque d'objets habituelle)
Pas:
Avoir une vue (ViewForContainer sur la photo) qui contient cette vue de conteneur, pour la réduire lorsque le contenu de la vue de conteneur est affiché. Connectez la prise à l'intérieur du premier View Controller
Masquer cette vue lors du premier chargement de VC
Afficher lorsque le bouton est cliqué entrez la description de l'image ici
Pour atténuer cette vue lorsque le contenu de la vue conteneur est affiché, définissez l'arrière-plan des vues sur Noir et l'opacité sur 30%
J'ai ajouté une réponse à la création de la vue popview dans une autre question Stackoverflow https://stackoverflow.com/a/49729431/5438240
la source
La réponse simple est Ajouter une sous-vue et changer son alpha.
la source