Как использовать 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
Это используется для размытия фона, светлого или темного, чтобы текст можно было наложить более легко. При желании вы можете включить вибрацию, при которой текст будет отображаться в ярком контрастном цвете вместе с размытием.