Création d'une vue de superposition floue
dans L'application musicale de la nouvelle iOS, on peut voir une pochette d'album Derrière une vue qui la brouille.
comment une telle chose peut-elle être accomplie? J'ai lu la documentation, mais ne trouve rien.
   
      
20 réponses
  Vous pouvez utiliser  UIVisualEffectView  pour obtenir cet effet. Il s'agit d'une API native qui a été peaufiné pour la performance et la grande durée de vie de la batterie, plus il est facile à mettre en œuvre.  
Swift:
//only apply the blur if the user hasn't disabled transparency effects
if !UIAccessibilityIsReduceTransparencyEnabled() {
    view.backgroundColor = .clear
    let blurEffect = UIBlurEffect(style: .dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    //always fill the view
    blurEffectView.frame = self.view.bounds
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    view.addSubview(blurEffectView) //if you have more UIViews, use an insertSubview API to place it where needed
} else {
    view.backgroundColor = .black
}
  
  Objectif-C:
//only apply the blur if the user hasn't disabled transparency effects
if (!UIAccessibilityIsReduceTransparencyEnabled()) {
    self.view.backgroundColor = [UIColor clearColor];
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
    UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
    //always fill the view
    blurEffectView.frame = self.view.bounds;
    blurEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:blurEffectView]; //if you have more UIViews, use an insertSubview API to place it where needed
} else {
    self.view.backgroundColor = [UIColor blackColor];
}
  
  si vous présentez ce contrôleur de vue modalement pour brouiller le contenu sous-jacent, vous aurez besoin de définir le style de présentation modale à Sur le contexte actuel et définir la couleur de fond à effacer pour s'assurer que le contrôleur de vue sous-jacent restera visible une fois que cela est présenté overtop.
Image
 puisque cette image dans la capture d'écran est statique, vous pouvez utiliser CIGaussianBlur  de L'Image de base (Nécessite iOS 6). Voici l'échantillon:    https://github.com/evanwdavis/Fun-with-Masks/blob/master/Fun%20with%20Masks/EWDBlurExampleVC.m     
attention, c'est plus lent que les autres options sur cette page.
#import <QuartzCore/QuartzCore.h>
- (UIImage*) blur:(UIImage*)theImage
{   
    // ***********If you need re-orienting (e.g. trying to blur a photo taken from the device camera front facing camera in portrait mode)
    // theImage = [self reOrientIfNeeded:theImage];
    // create our blurred image
    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage];
    // setting up Gaussian Blur (we could use one of many filters offered by Core Image)
    CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
    [filter setValue:inputImage forKey:kCIInputImageKey];
    [filter setValue:[NSNumber numberWithFloat:15.0f] forKey:@"inputRadius"];
    CIImage *result = [filter valueForKey:kCIOutputImageKey];
    // CIGaussianBlur has a tendency to shrink the image a little, 
    // this ensures it matches up exactly to the bounds of our original image
    CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]];
    UIImage *returnImage = [UIImage imageWithCGImage:cgImage];//create a UIImage for this function to "return" so that ARC can manage the memory of the blur... ARC can't manage CGImageRefs so we need to release it before this function "returns" and ends.
    CGImageRelease(cgImage);//release CGImageRef because ARC doesn't manage this on its own.
    return returnImage;
    // *************** if you need scaling
    // return [[self class] scaleIfNeeded:cgImage];
}
+(UIImage*) scaleIfNeeded:(CGImageRef)cgimg {
    bool isRetina = [[[UIDevice currentDevice] systemVersion] intValue] >= 4 && [[UIScreen mainScreen] scale] == 2.0;
    if (isRetina) {
        return [UIImage imageWithCGImage:cgimg scale:2.0 orientation:UIImageOrientationUp];
    } else {
        return [UIImage imageWithCGImage:cgimg];
    }
}
- (UIImage*) reOrientIfNeeded:(UIImage*)theImage{
    if (theImage.imageOrientation != UIImageOrientationUp) {
        CGAffineTransform reOrient = CGAffineTransformIdentity;
        switch (theImage.imageOrientation) {
            case UIImageOrientationDown:
            case UIImageOrientationDownMirrored:
                reOrient = CGAffineTransformTranslate(reOrient, theImage.size.width, theImage.size.height);
                reOrient = CGAffineTransformRotate(reOrient, M_PI);
                break;
            case UIImageOrientationLeft:
            case UIImageOrientationLeftMirrored:
                reOrient = CGAffineTransformTranslate(reOrient, theImage.size.width, 0);
                reOrient = CGAffineTransformRotate(reOrient, M_PI_2);
                break;
            case UIImageOrientationRight:
            case UIImageOrientationRightMirrored:
                reOrient = CGAffineTransformTranslate(reOrient, 0, theImage.size.height);
                reOrient = CGAffineTransformRotate(reOrient, -M_PI_2);
                break;
            case UIImageOrientationUp:
            case UIImageOrientationUpMirrored:
                break;
        }
        switch (theImage.imageOrientation) {
            case UIImageOrientationUpMirrored:
            case UIImageOrientationDownMirrored:
                reOrient = CGAffineTransformTranslate(reOrient, theImage.size.width, 0);
                reOrient = CGAffineTransformScale(reOrient, -1, 1);
                break;
            case UIImageOrientationLeftMirrored:
            case UIImageOrientationRightMirrored:
                reOrient = CGAffineTransformTranslate(reOrient, theImage.size.height, 0);
                reOrient = CGAffineTransformScale(reOrient, -1, 1);
                break;
            case UIImageOrientationUp:
            case UIImageOrientationDown:
            case UIImageOrientationLeft:
            case UIImageOrientationRight:
                break;
        }
        CGContextRef myContext = CGBitmapContextCreate(NULL, theImage.size.width, theImage.size.height, CGImageGetBitsPerComponent(theImage.CGImage), 0, CGImageGetColorSpace(theImage.CGImage), CGImageGetBitmapInfo(theImage.CGImage));
        CGContextConcatCTM(myContext, reOrient);
        switch (theImage.imageOrientation) {
            case UIImageOrientationLeft:
            case UIImageOrientationLeftMirrored:
            case UIImageOrientationRight:
            case UIImageOrientationRightMirrored:
                CGContextDrawImage(myContext, CGRectMake(0,0,theImage.size.height,theImage.size.width), theImage.CGImage);
                break;
            default:
                CGContextDrawImage(myContext, CGRectMake(0,0,theImage.size.width,theImage.size.height), theImage.CGImage);
                break;
        }
        CGImageRef CGImg = CGBitmapContextCreateImage(myContext);
        theImage = [UIImage imageWithCGImage:CGImg];
        CGImageRelease(CGImg);
        CGContextRelease(myContext);
    }
    return theImage;
}
  
  Pile flou (Boîte + Gaussien)
- StackBlur ceci implémente un mélange de boîte et de flou gaussien. 7x plus rapide que gaussian Non accéléré, mais pas aussi laid que la boîte floue. Voir une démo dans ici (version Java plugin) ou ici (version JavaScript). Cet algorithme est utilisé dans KDE et Camera+ et d'autres. Il n'utilise pas l'Accélérer Cadre, mais il est rapide.
 
Accélérer Le Cadre De
-     
dans la session" Implementing Engaging UI on iOS "de WWDC 2013 Apple explique comment créer un fond flou (à 14:30), et mentionne une méthode
applyLightEffectmise en œuvre dans le code échantillon en utilisant 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 entièrement l'effet de flou fourni par le panneau de contrôle de iOS 7" ( tweet , article ). L'article est détaillé et instructif.
 
    -(UIImage *)blurryGPUImage:(UIImage *)image withBlurLevel:(NSInteger)blur {
        GPUImageFastBlurFilter *blurFilter = [GPUImageFastBlurFilter new];
        blurFilter.blurSize = blur;
        UIImage *result = [blurFilter imageByFilteringImage:image];
        return result;
    }
  
  -   
à partir de indieambitions.com: Perform a blur using vImage . Algorithme est également utilisé dans iOS-RealTimeBlur .
 -   
de Nick Lockwood: https://github.com/nicklockwood/FXBlurView L'exemple montre le flou au-dessus d'une vue de rouleau. Il floue avec dispatch_async, puis syncs pour appeler les mises à jour avec UITrackingRunLoopMode de sorte que le flou n'est pas décalé quand UIKit donne plus de priorité au défilement de la vue UIScrollView. Cela est expliqué dans le livre de Nick iOS Core Animation , ce qui est génial.
 -    
iOS-flou cela prend la couche de flou de L'UIToolbar et le met ailleurs. Apple refusera votre application si vous utilisez cette méthode. Voir https://github.com/mochidev/MDBlurView/issues/4
 -   
From Evadne blog: LiveFrost: Fast, synchrone UIView Snapshot Convolving . Grand code et un bonne lecture. Quelques idées de ce post:
- utilisez une file d'attente en série pour activer les mises à jour de CADisplayLink.
 - réutilise les contextes bitmap à moins que les limites changent.
 - dessinez des images plus petites en utilisant -[CALayer renderInContext:] avec un facteur d'échelle de 0,5 F.
 
 
d'Autres choses
Andy Matuschak a dit sur Twitter: "vous il y a beaucoup d'endroits où on dirait qu'on le fait en temps réel, c'est statique avec des trucs intelligents."
à doubleencore.com disent-ils "nous avons trouvé qu'un rayon de flou de 10 pt plus une augmentation de 10 pt de la saturation imite le mieux l'effet de flou de iOS 7 dans la plupart des circonstances".
Un coup d'oeil à la privée les en-têtes d'Apple SBFProceduralWallpaperView .
Enfin, ce n'est pas un vrai flou, mais rappelez-vous que vous pouvez définir rasterizationScale pour obtenir une image pixelisée: http://www.dimzzy.com/blog/2010/11/blur-effect-for-uiview /
j'ai décidé d'afficher une version écrite de L'Objectif-C à partir de la réponse acceptée juste pour fournir plus d'options dans cette question..
- (UIView *)applyBlurToView:(UIView *)view withEffectStyle:(UIBlurEffectStyle)style andConstraints:(BOOL)addConstraints
{
  //only apply the blur if the user hasn't disabled transparency effects
  if(!UIAccessibilityIsReduceTransparencyEnabled())
  {
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:style];
    UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
    blurEffectView.frame = view.bounds;
    [view addSubview:blurEffectView];
    if(addConstraints)
    {
      //add auto layout constraints so that the blur fills the screen upon rotating device
      [blurEffectView setTranslatesAutoresizingMaskIntoConstraints:NO];
      [view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
                                                       attribute:NSLayoutAttributeTop
                                                       relatedBy:NSLayoutRelationEqual
                                                          toItem:view
                                                       attribute:NSLayoutAttributeTop
                                                      multiplier:1
                                                        constant:0]];
      [view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
                                                       attribute:NSLayoutAttributeBottom
                                                       relatedBy:NSLayoutRelationEqual
                                                          toItem:view
                                                       attribute:NSLayoutAttributeBottom
                                                      multiplier:1
                                                        constant:0]];
      [view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
                                                       attribute:NSLayoutAttributeLeading
                                                       relatedBy:NSLayoutRelationEqual
                                                          toItem:view
                                                       attribute:NSLayoutAttributeLeading
                                                      multiplier:1
                                                        constant:0]];
      [view addConstraint:[NSLayoutConstraint constraintWithItem:blurEffectView
                                                       attribute:NSLayoutAttributeTrailing
                                                       relatedBy:NSLayoutRelationEqual
                                                          toItem:view
                                                       attribute:NSLayoutAttributeTrailing
                                                      multiplier:1
                                                        constant:0]];
    }
  }
  else
  {
    view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
  }
  return view;
}
  
  les contraintes peuvent être supprimées si vous voulez incase si vous ne supportez que le mode portrait ou si je n'ajoute qu'un drapeau à cette fonction pour les utiliser ou non..
Je ne pense pas que je suis autorisé à poster le code, mais le post ci-dessus mentionnant le code échantillon 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 applyighteffect.
comme je l'ai noté ci-dessus dans un commentaire, le flou pomme a saturation et d'autres choses qui se passe en dehors de flou. Un simple flou ne le fera pas... si vous cherchez à imiter leur style.
je pense que la solution la plus facile à cela est d'outrepasser UIToolbar, qui brouille tout derrière elle dans iOS 7. Il est assez sournois, mais il est très simple pour vous de mettre en œuvre, et rapide!
 vous pouvez le faire avec n'importe quelle vue, juste en faire une sous-classe de UIToolbar au lieu de UIView . Vous pouvez même le faire avec une propriété  UIViewController  's  view , par exemple...  
  1) Créer une nouvelle classe qui est une "sous-classe de"  UIViewController  et vérifier la boîte POUR "avec XIB pour interface utilisateur".  
  2) Sélectionnez la vue et allez à l'inspecteur d'identité dans le panneau de droite (alt-command-3). Remplacer" classe "par UIToolbar . Allez maintenant à l'attribut inspector (alt-command-4) et changez la couleur "Background" en "Clear Color".  
  3) Ajouter un subview à la vue principale et le raccorder à un IBOutlet dans votre interface. Appelez-le backgroundColorView . Il ressemblera à quelque chose comme ceci, comme une catégorie privée dans le fichier implementation (  .m ).  
@interface BlurExampleViewController ()
@property (weak, nonatomic) IBOutlet UIView *backgroundColorView;
@end
  
   4) Allez au fichier d'implémentation du contrôleur de vue ( .m ) et changez la méthode -viewDidLoad , pour regarder comme suit:  
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.barStyle = UIBarStyleBlack; // this will give a black blur as in the original post
    self.backgroundColorView.opaque = NO;
    self.backgroundColorView.alpha = 0.5;
    self.backgroundColorView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:1];
}
  
  cela vous donnera une vue gris foncé, qui brouille tout derrière elle. Pas de drôles d'Affaires, pas de flou dans l'image de base, en utilisant tout ce qui est à portée de main fourni par L'OS/SDK.
vous pouvez ajouter cette vue vue du contrôleur vers une autre vue, comme suit:
[self addChildViewController:self.blurViewController];
[self.view addSubview:self.blurViewController.view];
[self.blurViewController didMoveToParentViewController:self];
// animate the self.blurViewController into view
  
  faites-moi savoir si quelque chose n'est pas clair, je serai heureux de vous aider!
Modifier
UIToolbar a été modifié en 7.0.3 Pour donner éventuellement un effet indésirable lors de l'utilisation d'un flou coloré.
  nous avons utilisé pour être en mesure de définir la couleur en utilisant  barTintColor , mais si vous avez fait cela avant, vous aurez besoin de définir l'alpha composant à 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 que  self  est une sous-classe de  UIToolbar  )  
UIColor *color = [UIColor blueColor]; // for example
self.barTintColor = [color colorWithAlphaComponent:0.5];
  
  Cela donnera une teinte bleue à la vue floue.
Voici une implémentation rapide de Swift en utilisant CIGaussianBlur:
func blur(image image: UIImage) -> UIImage {
    let radius: CGFloat = 20;
    let context = CIContext(options: nil);
    let inputImage = CIImage(CGImage: image.CGImage!);
    let filter = CIFilter(name: "CIGaussianBlur");
    filter?.setValue(inputImage, forKey: kCIInputImageKey);
    filter?.setValue("\(radius)", forKey:kCIInputRadiusKey);
    let result = filter?.valueForKey(kCIOutputImageKey) as! CIImage;
    let rect = CGRectMake(radius * 2, radius * 2, image.size.width - radius * 4, image.size.height - radius * 4)
    let cgImage = context.createCGImage(result, fromRect: rect);
    let returnImage = UIImage(CGImage: cgImage);
    return returnImage;
}
  
    	                réponse acceptée est correcte, mais il y a une étape importante qui manque ici, au cas où cette vue - pour laquelle vous voulez un arrière-plan flou - est présenté en utilisant
   [self presentViewController:vc animated:YES completion:nil]   
par défaut, cela annulera le flou puisque UIKit supprime la vue du présentateur, que vous êtes en fait en train de brouiller. Pour éviter cette suppression, ajouter cette ligne avant la précédente
  vc.modalPresentationStyle = UIModalPresentationOverFullScreen;   
  ou utiliser un autre  Over   style.  
OBJECTIF-C
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = self.accessImageView.bounds;
[self.accessImageView addSubview:visualEffectView];
  
  SWIFT 3.0
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
  
    
    	                trouvé par accident, me donne vraiment grand (presque dupliquer avec Apple) résultats et utilise le cadre D'accélération. -- http://pastebin.com/6cs6hsyQ * Pas écrit par moi
func blurBackgroundUsingImage(image: UIImage)
{
    var frame                   = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
    var imageView               = UIImageView(frame: frame)
    imageView.image             = image
    imageView.contentMode       = .ScaleAspectFill
    var blurEffect              = UIBlurEffect(style: .Light)
    var blurEffectView          = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame        = frame
    var transparentWhiteView    = UIView(frame: frame)
    transparentWhiteView.backgroundColor = UIColor(white: 1.0, alpha: 0.30)
    var viewsArray              = [imageView, blurEffectView, transparentWhiteView]
    for index in 0..<viewsArray.count {
        if let oldView = self.view.viewWithTag(index + 1) {
            var oldView         = self.view.viewWithTag(index + 1)
            // Must explicitly unwrap oldView to access its removeFromSuperview() method as of Xcode 6 Beta 5
            oldView!.removeFromSuperview()
        }
        var viewToInsert        = viewsArray[index]
        self.view.insertSubview(viewToInsert, atIndex: index + 1)
        viewToInsert.tag        = index + 1
    }
}
  
    	                Apple a fourni une extension pour la classe UIImage appelé UIImage+Imageffects.H. Dans cette classe vous avez les méthodes désirées pour brouiller votre vue
Using Uiimageeffets
  pour ceux qui veulent plus de contrôle, vous pouvez utiliser le code échantillon  UIImageEffects  D'Apple.   
  vous pouvez copier le code pour  UIImageEffects  de la bibliothèque de développeur D'Apple:    flou et teinture une Image     
Et voici comment l'appliquer :
#import "UIImageEffects.h"
...
self.originalImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];
  
    	                Cette réponse est fondée sur Mitja Semolic excellent auparavant répondre . Je l'ai converti en swift 3, j'ai ajouté une explication à ce qui se passe dans coments, j'en ai fait une extension D'un UIViewController pour que n'importe quel VC puisse l'appeler à volonté, j'ai ajouté une vue non-bloquée pour montrer l'application sélective, et j'ai ajouté un bloc d'achèvement pour que le contrôleur de la vue appelant puisse faire ce qu'il veut à l'achèvement du flou.
    import UIKit
//This extension implements a blur to the entire screen, puts up a HUD and then waits and dismisses the view.
    extension UIViewController {
        func blurAndShowHUD(duration: Double, message: String, completion: @escaping () -> Void) { //with completion block
            //1. Create the blur effect & the view it will occupy
            let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
            let blurEffectView = UIVisualEffectView()//(effect: blurEffect)
            blurEffectView.frame = self.view.bounds
            blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        //2. Add the effect view to the main view
            self.view.addSubview(blurEffectView)
        //3. Create the hud and add it to the main view
        let hud = HudView.getHUD(view: self.view, withMessage: message)
        self.view.addSubview(hud)
        //4. Begin applying the blur effect to the effect view
        UIView.animate(withDuration: 0.01, animations: {
            blurEffectView.effect = blurEffect
        })
        //5. Halt the blur effects application to achieve the desired blur radius
        self.view.pauseAnimationsInThisView(delay: 0.004)
        //6. Remove the view (& the HUD) after the completion of the duration
        DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
            blurEffectView.removeFromSuperview()
            hud.removeFromSuperview()
            self.view.resumeAnimationsInThisView()
            completion()
        }
    }
}
extension UIView {
    public func pauseAnimationsInThisView(delay: Double) {
        let time = delay + CFAbsoluteTimeGetCurrent()
        let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, time, 0, 0, 0, { timer in
            let layer = self.layer
            let pausedTime = layer.convertTime(CACurrentMediaTime(), from: nil)
            layer.speed = 0.0
            layer.timeOffset = pausedTime
        })
        CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, CFRunLoopMode.commonModes)
    }
    public func resumeAnimationsInThisView() {
        let pausedTime  = layer.timeOffset
        layer.speed = 1.0
        layer.timeOffset = 0.0
        layer.beginTime = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime
    }
}
  
  j'ai confirmé qu'il fonctionne à la fois avec iOS 10.3.1 et ios 11
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 avec UINavigationController .  
// suppose you've done blur effect with your presented view controller
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController];
// this is very important, if you don't do this, the blur effect will darken after view did appeared
// the reason is that you actually present navigation controller, not presented controller
// please note it's "OverFullScreen", not "OverCurrentContext"
nav.modalPresentationStyle = UIModalPresentationOverFullScreen;
UIViewController *presentedViewController = [[UIViewController alloc] init]; 
// the presented view controller's modalPresentationStyle is "OverCurrentContext"
presentedViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[presentingViewController presentViewController:nav animated:YES completion:nil];
  
  Profitez-en!
de Xcode vous pouvez le faire facilement. Suivez les étapes de xcode. Drage vue d'effet visuel sur votre uivi ou imageview.
Codage Heureux :)
voici le code Swift 2.0 pour la solution qui a été fournie dans réponse acceptée :
    //only apply the blur if the user hasn't disabled transparency effects
    if !UIAccessibilityIsReduceTransparencyEnabled() {
        self.view.backgroundColor = UIColor.clearColor()
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        //always fill the view
        blurEffectView.frame = self.view.bounds
        blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        self.view.addSubview(blurEffectView) //if you have more UIViews, use an insertSubview API to place it where needed
    } else {
        self.view.backgroundColor = UIColor.blackColor()
    }
  
    	                si ajoute une vue floue sombre pour tableView, cela le fera magnifiquement:
tableView.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = tableView.bounds
blurEffectView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
// Assigning blurEffectView to backgroundView instead of addSubview to tableView makes tableView cell not blocked by blurEffectView 
tableView.backgroundView = blurEffectView
  
    	                Personnalisé flou échelle
     Vous pouvez essayer     UIVisualEffectView  réglage personnalisé  
class BlurViewController: UIViewController {
    private let blurEffect = (NSClassFromString("_UICustomBlurEffect") as! UIBlurEffect.Type).init()
    override func viewDidLoad() {
        super.viewDidLoad()
        let blurView = UIVisualEffectView(frame: UIScreen.main.bounds)
        blurEffect.setValue(1, forKeyPath: "blurRadius")
        blurView.effect = blurEffect
        view.addSubview(blurView)
    }   
}
  
     sortie: - pour  blurEffect.setValue(1...  &  blurEffect.setValue(2..     
     
        
     
         
Swift 4:
pour ajouter un overlay, ou la vue popup, vous pouvez également utiliser la vue conteneur avec laquelle vous obtenez un contrôleur de vue libre (vous obtenez la vue conteneur à partir de la palette d'objet/bibliothèque habituelle)
Suit:
ont une vue (ViewForContainer dans le pic) qui tient cette vue de conteneur, à dim it lorsque le contenu de la vue de conteneur sont affichés. Connecter la sortie à l'intérieur du contrôleur de première vue
cacher cette vue lorsque le 1er VC charge
décroche lorsque le bouton est cliqué entrez la description de l'image ici
pour diminuer cette vue lorsque le contenu de la vue conteneur est affiché, réglez les vues arrière-plan à noir et opacité à 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 réponse Simple est D'Ajouter un sous-vue et de le modifier en alpha.
UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
UIView *subView = [[UIView alloc] initWithFrame:popupView.frame];
UIColor * backImgColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_Img.png"]];
subView.backgroundColor = backImgColor;
subView.alpha = 0.5;
[mainView addSubview:subView];