Создание размытого вида наложения


в музыкальном приложении новой iOS мы можем увидеть обложку альбома за видом, который размывает его.

Как можно сделать что-то подобное? Я читал документацию, но ничего там не нашел.

20 320

20 ответов:

можно использовать UIVisualEffectView для достижения этого эффекта. Это родной API, который был точно настроен для производительности и большой срок службы батареи, плюс это легко реализовать.

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
}

Цель-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];
}

Если вы представляете этот контроллер вида модально, чтобы размыть основное содержимое, вам нужно будет установить модальный стиль представления в течение текущего контекста и установить цвет фона для очистки, чтобы обеспечить базовый контроллер Вида останется видимым, как только он будет представлен сверху.

Core Image

так как это изображение на скриншоте является статическим, вы можете использовать CIGaussianBlur из основного образа (требуется iOS 6). Вот пример: https://github.com/evanwdavis/Fun-with-Masks/blob/master/Fun%20with%20Masks/EWDBlurExampleVC.m

имейте в виду, что это медленнее, чем другие параметры на этой странице.

#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;
}

размытие стека (Box + Gaussian)

  • StackBlur это реализует сочетание коробки и Гауссово размывание. 7x быстрее, чем не ускоренный гауссовский, но не такой уродливый, как размытие коробки. Смотрите демо в здесь (версия плагина Java) или здесь (JavaScript-версия). Этот алгоритм используется в KDE и Camera+ и других. Он не использует структуру ускорения, но это быстро.

Ускорить Рамки

  • в сеансе "реализация привлекательного пользовательского интерфейса на iOS" от WWDC 2013 Apple объясняет, как создать размытый фон (в 14:30), и упоминает метод applyLightEffect реализовано в примере кода с помощью ускорения.рамки.

  • GPUImage использует шейдеры OpenGL для создания динамических размытий. Он имеет несколько типов размытия: GPUImageBoxBlurFilter, GPUImageFastBlurFilter, GaussianSelectiveBlur, GPUImageGaussianBlurFilter. Существует даже GPUImageiOSBlurFilter, который " должен полностью копировать эффект размытия, предоставляемый панелью управления iOS 7" (Твитнуть,статьи). Статья является подробной и информативной.

    -(UIImage *)blurryGPUImage:(UIImage *)image withBlurLevel:(NSInteger)blur {
        GPUImageFastBlurFilter *blurFilter = [GPUImageFastBlurFilter new];
        blurFilter.blurSize = blur;
        UIImage *result = [blurFilter imageByFilteringImage:image];
        return result;
    }
  • от indieambitions.com: выполните размытие с помощью vImage. Алгоритм также используется в iOS-RealTimeBlur.

  • от Ника Локвуда:https://github.com/nicklockwood/FXBlurView в примере показано размытие над видом прокрутки. Он размывается с помощью dispatch_async, а затем синхронизируется с вызовите обновления с помощью UITrackingRunLoopMode, чтобы размытие не отставало, когда UIKit дает больше приоритета прокрутке UIScrollView. Это объясняется в книге Ника iOS Core Animation, который, кстати, здорово.

  • прошивкой подавления размытости это берет размытый слой UIToolbar и помещает его в другое место. Apple отклонит ваше приложение, если вы используете этот метод. Видеть https://github.com/mochidev/MDBlurView/issues/4

  • из блога Evadne:LiveFrost: Быстрая, Синхронная Свертка Снимка UIView. Отличный код и отличное чтение. Некоторые идеи из этого поста:

    • используйте последовательную очередь для дросселирования обновлений из CADisplayLink.
    • повторно использовать растровые контексты, если границы не изменятся.
    • нарисуйте меньшие изображения с помощью - [CALayer renderInContext:] с масштабом 0,5 f факторный.

прочее

Энди Matuschak сказал в Твиттере: "вы знаете, многие места, где кажется, что мы делаем это в реальном времени, это статично с умными трюками."

At doubleencore.com они говорят:"мы обнаружили, что радиус размытия 10 пт плюс увеличение насыщенности на 10 пт лучше всего имитирует эффект размытия iOS 7 в большинстве случаев".

заглянуть в частные заголовки Яблоко SBFProceduralWallpaperView.

наконец, это не настоящее размытие, но помните, что вы можете установить rasterizationScale, чтобы получить пиксельное изображение:http://www.dimzzy.com/blog/2010/11/blur-effect-for-uiview/

Я решил опубликовать письменную версию Objective-C из принятого ответа, чтобы предоставить больше возможностей в этом вопросе..

- (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;
}

ограничения могут быть удалены, если вы хотите упаковать, если вы поддерживаете только портретный режим, или я просто добавляю флаг в эту функцию, чтобы использовать их или нет..

Я не думаю, что мне разрешено публиковать код, но приведенный выше пост, в котором упоминается пример кода WWDC, является правильным. Вот ссылка:https://developer.apple.com/downloads/index.action?name=WWDC%202013

файл, который вы ищете, является категорией на UIImage, и метод applyLightEffect.

Как я уже отмечал выше в комментарии, Apple Blur имеет насыщенность и другие вещи, происходящие помимо размытия. Простое размытие не подойдет... если вы не хотите подражать их стилю.

я думаю, что самое простое решение для этого-переопределить UIToolbar, который размывает все за ним в iOS 7. Это довольно подлый, но это очень просто для вас, чтобы реализовать, и быстро!

вы можете сделать это с любым видом, просто сделайте его подклассом UIToolbar вместо UIView. Вы даже можете сделать это с помощью UIViewController ' s view свойства, например...

1) создайте новый класс, который является "подклассом" UIViewController и установите флажок " с XIB для пользователя взаимодействие."

2) выберите вид и перейдите к инспектору идентификации в правой панели (alt-command-3). Измените "класс" на UIToolbar. Теперь перейдите в Инспектор атрибутов (alt-command-4) и измените цвет "фона" на "очистить цвет".

3) Добавьте подвид в основной вид и подключите его к IBOutlet в вашем интерфейсе. Назовите это backgroundColorView. Это будет выглядеть примерно так, как отдельная категория в реализации (.m) файл.

@interface BlurExampleViewController ()
@property (weak, nonatomic) IBOutlet UIView *backgroundColorView;
@end

4) перейдите к реализации контроллера вида (.m) файл и изменить -viewDidLoad метод, чтобы выглядеть следующим образом:

- (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];
}

это даст вам темно-серый вид, который размывает все позади него. Нет смешного бизнеса, нет медленного размытия изображения ядра, используя все, что у вас под рукой предусмотрено OS/SDK.

вы можете добавить представление этого контроллера вида в другое представление следующим образом:

[self addChildViewController:self.blurViewController];
[self.view addSubview:self.blurViewController.view];
[self.blurViewController didMoveToParentViewController:self];

// animate the self.blurViewController into view

Дайте мне знать, если ничего непонятно, буду рад помочь!


Edit

UIToolbar был изменен в 7.0.3, чтобы дать возможно-нежелательный эффект при использовании цветное пятно.

раньше мы могли установить цвет с помощью barTintColor, но если вы делали это раньше, вам нужно будет установить Альфа-компонент меньше 1. В противном случае ваш UIToolbar будет полностью непрозрачным цветом - без размытия.

это может быть достигнуто следующим образом: (подшипник в виду self является наследником UIToolbar)

UIColor *color = [UIColor blueColor]; // for example
self.barTintColor = [color colorWithAlphaComponent:0.5];

это придаст синеватый оттенок размытому виду.

вот быстрая реализация в Swift с использованием 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;
}

принятый ответ правильный, но здесь отсутствует важный шаг, если этот вид, для которого вы хотите размытый фон, представлен с помощью

[self presentViewController:vc animated:YES completion:nil]

по умолчанию это отменит размытие, поскольку UIKit удаляет представление докладчика, которое вы фактически размываете. Чтобы избежать этого удаления, добавьте эту строку перед предыдущей

vc.modalPresentationStyle = UIModalPresentationOverFullScreen;

или использовать другие Over стили.

С

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)

от:https://stackoverflow.com/a/24083728/4020910

нашел это случайно, дает мне действительно отличные (почти дублирующие с Apple) результаты и использует структуру ускорения. -- http://pastebin.com/6cs6hsyQ *Не написано мной

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 предоставила расширение для класса UIImage под названием UIImage+ImageEffects.h. в этом классе у вас есть необходимые методы для размытия вашего представления

Использование UIImageEffects

для людей, которые хотят больше контроля, вы можете использовать Apple UIImageEffects пример кода.

вы можете скопировать код UIImageEffects из библиотеки разработчиков Apple:размытие и тонирование изображения

и вот как его применить:

#import "UIImageEffects.h"
...

self.originalImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];

этот ответ основан на отличный ранний ответ Мити Семолика. Я преобразовал его в swift 3, добавил объяснение тому, что происходит в coments, сделал его расширением UIViewController, чтобы любой VC мог вызвать его по своему желанию, добавил незамутненное представление для отображения выборочного приложения и добавил блок завершения, чтобы вызывающий контроллер представления мог делать все, что он хочет, по завершении размытия.

    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
    }
}

Я подтвердил, что он работает с iOS 10.3.1 и iOS 11

важное дополнение к ответу @Joey

Это относится к ситуации, когда вы хотите представить размытый фон UIViewController С 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];

наслаждайтесь!

enter image description here

из Xcode вы можете сделать это легко. Следуйте инструкциям из xcode. Драге визуальный эффект просмотра на вашем наследник UIView или графическое представление.

Удачи В Кодировании :)

вот код Swift 2.0 для решения, которое было предоставлено в принято отвечать:

    //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()
    }

если добавить темное размытие для tableView, это будет красиво сделать это:

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

пользовательский масштаб размытия

вы можете попробоватьUIVisualEffectView С настройки как -

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)
    }   
}

выход:- для blurEffect.setValue(1... & blurEffect.setValue(2.. enter image description here enter image description here

Swift 4:

чтобы добавить наложение или всплывающее представление, вы также можете использовать представление контейнера, с которым вы получаете бесплатный контроллер вида ( вы получаете представление контейнера из обычной палитры/библиотеки объектов)

действия:

есть вид (ViewForContainer на рис.), который содержит этот вид контейнера, чтобы затемнить его при отображении содержимого вида контейнера. Подключите розетку внутри первого контроллера вида

скрыть это представление, когда 1-й VC нагрузки

отобразить при нажатии кнопки Введите описание изображения здесь

чтобы затемнить это представление при отображении содержимого представления контейнера, установите фон представления на черный и непрозрачность 30%

Я добавил ответ на создание представления popview в другом вопросе Stackoverflow https://stackoverflow.com/a/49729431/5438240

простой ответ-добавить подвид и изменить его альфа.

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];