Comment puis-je produire un effet similaire à celui d'iOS 7 flou de vue?
Je suis en train d'essayer de reproduire ce flous d'arrière-plan à partir d'Apple publié iOS 7 exemple de l'écran:
Cette question suggère d'appliquer un IC filtre le contenu ci-dessous, mais c'est une toute autre approche. Il est évident que l'iOS 7 n'a pas de capturer le contenu de la vue ci-dessous, pour de nombreuses raisons:
- Faire un peu rugueuse de test, de capturer une capture d'écran de la vue ci-dessous et l'application d'un CIGaussianBlur filtre avec un assez grand rayon d'imiter iOS 7 est flou style dure 1 à 2 secondes, même sur un simulateur.
- L'iOS 7 flou de vue est en mesure de flou sur les vues dynamiques, tels que la vidéo ou des animations, avec pas remarqué de lag.
Quelqu'un peut émettre l'hypothèse que les cadres qu'ils pourraient utiliser pour créer cet effet, et si il est possible de créer un effet similaire avec le public actuel de l'Api?
Edit: (de commentaire) On ne sait pas vraiment comment Apple est en train de faire, mais existe-il des hypothèses de base que nous pouvons faire? On peut supposer qu'ils sont à l'aide de matériel, droit?
Est l'effet d'auto-contenue dans chaque vue, tels que l'effet n'est pas réellement savoir ce qu'il y a derrière? Ou doit, basé sur la façon dont les flous de travail, le contenu derrière le flou être pris en considération?
Si le contenu derrière la effet sont pertinentes, peut-on supposer que Apple est à la réception d'un "flux" de le contenu ci-dessous et en continu de rendu avec un flou de bougé?
- (Je pense que nous pouvons supposer que apple utilise pur, GL pour rendre les écrans d'accueil, de toute façon. Je doute qu'ils sont de le dégager avec UIViews et d'autres choses qui dégraderait les performances, étant donné que c'est un élément clé de l'OS)
- Comme je l'ai indiqué dans les commentaires de ma réponse ici: stackoverflow.com/a/17048668/19679 ils ont écrit l'OS, donc bien sûr qu'ils vont avoir accéléré l'accès au contenu des calques situés en dessous de la vue actuelle. Nous pouvons voir une partie de ce qu'ils pourraient utiliser dans le privé IOSurface API: stackoverflow.com/questions/14135215/... . Gaussien flou peut être faite beaucoup plus rapidement que la généralisation d'un flou Gaussien cas, si ils ont un rayon, ou même utiliser des optimisations intéressantes comme partie intégrante des images.
- Pour paraphraser Jessica Simpson... je n'ai aucune idée de ce que cela signifie, mais ça sonne cool que diable! Mais sérieusement, dites-vous que vous pouvez utiliser partiellement transparent vue avec un filtre de flou et de le poser sur un autre point de vue pour obtenir cet effet?
- stackoverflow.com/a/25706250/2308190 a fonctionné parfaitement pour moi la première fois que j'ai essayé, et a été concis
Vous devez vous connecter pour publier un commentaire.
Pourquoi la peine de répliquer l'effet? Il suffit de dessiner une UIToolbar derrière votre point de vue.
frame
outransform
de cette barre d'outils/de la vue ou quelque chose comme ça, ou de mauvaises choses vont arriver. Il est également fortement conseillé de déposer le Radar des rapports de bug sur ce, à constituer un cas à l'interne afin de pouvoir obtenir une véritable API publique pour cet effet!UITabBar
lui-même.Apple a publié code lors de la WWDC de la catégorie sur UIImage qui comprend cette fonctionnalité, si vous avez un compte de développeur, vous pouvez saisir le UIImage catégorie (et le reste de l'exemple de code) en allant sur ce lien: https://developer.apple.com/wwdc/schedule/ et de navigation pour l'article 226 et en cliquant sur détails. Je n'ai pas joué avec ça encore, mais je pense que l'effet sera beaucoup plus lente sur iOS 6, il y a quelques améliorations à iOS 7 qui font de l'accaparement la première capture d'écran qui est utilisé comme entrée pour l'effet de flou est beaucoup plus rapide.
Lien Direct: https://developer.apple.com/downloads/download.action?path=wwdc_2013/wwdc_2013_sample_code/ios_uiimageeffects.zip
En fait, je parie que ce serait assez simple à réaliser. Il ne serait probablement pas fonctionner ou de ressembler exactement à ce que Apple a à faire, mais pourrait être très proche.
Tout d'abord, vous devez déterminer la CGRect de la UIView que vous allez présenter. Une fois que vous avez déterminé que vous n'avez qu'à saisir une image de la partie de l'INTERFACE utilisateur de sorte qu'il peut être floue. Quelque chose comme ceci...
Flou Gaussien - Recommandé
À l'aide de la
UIImage+ImageEffects
Catégorie d'Apple fourni ici, vous obtiendrez un flou gaussien qui ressemble beaucoup comme le flou dans iOS 7.Zone De Flou
Vous pouvez également utiliser une zone de flou à l'aide de la suite de
boxBlurImageWithBlur:
UIImage catégorie. Il est basé sur un algorythem que vous pouvez trouver ici.Maintenant que vous êtes le calcul de la zone de l'écran pour le flou, le passage dans la catégorie flou et la réception d'une UIImage de retour qui a été brouillée, maintenant tout ce qui reste est de mettre le flou de l'image comme arrière-plan de la vue que vous allez présenter. Comme je l'ai dit, ce ne sera pas un match parfait pour ce que fait Apple, mais il faudrait tout de même l'air assez cool.
Espère que cela aide.
renderInContext
, l'utilisation de la nouvelledrawViewHierarchyInRect:
ousnapshotView:
. La WWDC parler 216 "la mise en Œuvre de Mobiliser de l'INTERFACE utilisateur sur iOS7" des revendications 5-15x l'amélioration de la performance.drawViewHierarchyInRect:afterScreenUpdates:
iOS8 répondu à ces questions.
- (instancetype)initWithEffect:(UIVisualEffect *)effect
ou Swift:
init(effect effect: UIVisualEffect)
Je viens d'écrire mon petit sous-classe de UIView qui a la capacité de produire natif iOS 7 flou sur n'importe quel affichage personnalisé. Il utilise UIToolbar mais dans un chemin sûr pour changer de cadre, de limites, de couleur et alpha avec animation en temps réel.
S'il vous plaît laissez-moi savoir si vous remarquez des problèmes.
https://github.com/ivoleko/ILTranslucentView
Il y a une rumeur que les ingénieurs d'Apple ont réclamé, à faire de cette performance qu'ils lisent directement de la gpu de la mémoire tampon qui pose des problèmes de sécurité qui est pourquoi il n'y a pas d'API publique pour le faire encore.
C'est une solution que vous pouvez voir dans la vidios de la WWDC. Que vous avez à faire un Flou Gaussien, donc la première chose que vous avez à faire est d'ajouter une nouvelle .m et .h fichier avec le code que j'ai écris ici, alors vous devez faire et l'écran de tirer, utiliser l'effet souhaité et de l'ajouter à votre vue, votre UITable UIView ou ce que jamais doit être transparent, vous pouvez jouer avec applyBlurWithRadius, pour l'archivage de l'effet désiré, cet appel fonctionne avec n'importe quel UIImage.
À la fin de la estompée image de l'arrière-plan et le reste des contrôles ci-dessus doit être transparent.
Pour que cela fonctionne, vous devez ajouter les bibliothèques suivantes:
Acelerate.cadre,UIKit.cadre,CoreGraphics.cadre
J'espère que vous l'aimez.
Heureux de codage.
Vous pouvez trouver votre solution d'apple, et de DÉMONSTRATION dans cette page:
La WWDC 2013 , de trouver et de télécharger des UIImageEffects exemple de code.
Puis avec @Jeremy Fox code. Je l'ai changé pour
Espère que cela va vous aider.
Ici est vraiment un moyen facile de le faire:https://github.com/JagCesar/iOS-blur
Il suffit de copier le calque de UIToolbar et vous avez terminé, AMBlurView le fait pour vous.
Bon, c'est pas comme floue comme centre de contrôle, mais est assez floue.
Rappelez-vous que iOS7 est sous NDA.Chaque réponse ici est d'utiliser vImageBoxConvolve_ARGB8888 cette fonction est vraiment, vraiment lent, c'est très bien, si la performance n'est pas une priorité, mais si vous utilisez ce pour la transition entre les deux Contrôleurs (par exemple), cette approche implique une fois de plus de 1 seconde ou peut-être plus, c'est très mauvais pour l'expérience utilisateur de votre application.
Si vous préférez laisser tout cela de traitement d'image pour le GPU (Et vous devriez), vous pouvez obtenir un bien meilleur effet et aussi génial fois arrondissement 50ms (en supposant que vous avez un délai de 1 seconde dans la première approche), donc, permet de le faire.
D'abord télécharger le GPUImage Cadre (sous Licence BSD) ici.
Ensuite, Ajoutez les classes suivantes (.m et .h) de la GPUImage (je ne suis pas sûr que ceux-ci sont le minimum nécessaire pour l'effet de flou uniquement)
GPUImageTwoPassTextureSamplingFilter
iOS/GPUImage-Préfixe.pch
Ensuite la création de la catégorie sur UIImage, qui va ajouter un effet de flou à une UIImage:
Et en dernier, ajoutez les éléments suivants cadres de votre projet:
AVFoundation
CoreMedia
CoreVideo
OpenGLES
Ouais, obtenu de plaisir avec ce beaucoup plus rapide approche 😉
Vous pouvez essayer d'utiliser ma vue personnalisée, qui a la capacité de rendre flou l'arrière-plan. Il le fait par le semblant de prendre un instantané de l'arrière-plan et le flou, tout comme celui d'Apple, la WWDC de code. Il est très simple à utiliser.
J'ai aussi fait des progrès au cours de simuler la dynamique de flou, sans perdre de performance. Le fond de mon point de vue est un scrollView qui défile avec la vue de fournir ainsi l'effet de flou pour le reste de la superview.
Voir l'exemple et le code sur mon GitHub
Base d'arrière-plan met en œuvre l'souhaité iOS 7 effet.
https://github.com/justinmfischer/core-background
Avertissement: je suis l'auteur de ce projet