Как использовать UIVisualEffectView для размытия изображения?

Может ли кто-нибудь дать небольшой пример применения размытия к изображению? Я пытался выяснить код на некоторое время сейчас: (еще новый в obj c!

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

Примените UIVisualEffectView к существующему виду, чтобы применить размытие или эффект вибрации к выходящему виду. После добавления UIVisualEffectView в иерархию представлений, добавьте любые подпункты в contentView UIVisualEffectView. Не добавляйте subviews непосредственно в UIVisualEffectView.

https://developer.apple.com/documentation/uikit/uivisualeffectview#//apple_ref/occ/instp/UIVisualEffectView/contentView

Ответ 1

Просто поместите это размытие на изображение. Вот пример в Objective-C:

UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

visualEffectView.frame = imageView.bounds;
[imageView addSubview:visualEffectView];

и Swift:

var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))    

visualEffectView.frame = imageView.bounds

imageView.addSubview(visualEffectView)

Ответ 2

Вот как использовать UIVibrancyEffect и UIBlurEffect с UIVisualEffectView

Objective-C:

// Blur effect
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
[blurEffectView setFrame:self.view.bounds];
[self.view addSubview:blurEffectView];

// Vibrancy effect
UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
UIVisualEffectView *vibrancyEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect];
[vibrancyEffectView setFrame:self.view.bounds];

// Label for vibrant text
UILabel *vibrantLabel = [[UILabel alloc] init];
[vibrantLabel setText:@"Vibrant"];
[vibrantLabel setFont:[UIFont systemFontOfSize:72.0f]];
[vibrantLabel sizeToFit];
[vibrantLabel setCenter: self.view.center];

// Add label to the vibrancy view
[[vibrancyEffectView contentView] addSubview:vibrantLabel];

// Add the vibrancy view to the blur view
[[blurEffectView contentView] addSubview:vibrancyEffectView];

Swift 4:

    // Blur Effect
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = view.bounds
    view.addSubview(blurEffectView)

    // Vibrancy Effect
    let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect)
    let vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect)
    vibrancyEffectView.frame = view.bounds

    // Label for vibrant text
    let vibrantLabel = UILabel()
    vibrantLabel.text = "Vibrant"
    vibrantLabel.font = UIFont.systemFont(ofSize: 72.0)
    vibrantLabel.sizeToFit()
    vibrantLabel.center = view.center

    // Add label to the vibrancy view
    vibrancyEffectView.contentView.addSubview(vibrantLabel)

    // Add the vibrancy view to the blur view
    blurEffectView.contentView.addSubview(vibrancyEffectView)

Ответ 3

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

XCode6 beta5

Вы также можете легко использовать динамику UIVisualEffect, которая автоматически создаст еще один вложенный UIVisualEffectView в контуре документа с включенной активностью по умолчанию. Затем вы можете добавить ярлык или текстовое представление в вложенный UIView (опять же, свойство contentView для UIVisualEffectView), чтобы добиться того же эффекта, что элемент " > слайд для разблокировки".

enter image description here

Ответ 4

Если кто-то хочет ответить в Swift:

var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) // Change .Dark into .Light if you'd like.

var blurView = UIVisualEffectView(effect: blurEffect)

blurView.frame = theImage.bounds // 'theImage' is an image. I think you can apply this to the view too!

Обновление:

На данный момент он доступен под IB, поэтому вам не нужно ничего кодировать для него.

Ответ 5

Я предпочитаю создавать визуальные эффекты через Storyboard - никакого кода, используемого для создания или поддержки элементов пользовательского интерфейса. Это дает мне полную поддержку ландшафта. Я сделал небольшую демонстрацию использования UIVisualEffects с Blur, а также Vibrancy.

Демо на Github

Ответ 6

-(void) addBlurEffectOverImageView:(UIImageView *) _imageView
{
    UIVisualEffect *blurEffect;
    blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];

    UIVisualEffectView *visualEffectView;
    visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

    visualEffectView.frame = _imageView.bounds;
    [_imageView addSubview:visualEffectView];
}

Ответ 7

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