web-dev-qa-db-fra.com

Comment utiliser UIVisualEffectView to Blur Image?

Quelqu'un pourrait-il donner un petit exemple d'application du flou à une image? Cela fait un moment que je cherche à comprendre le code :( toujours nouveau chez obj c!

La UIVisualEffectView fournit une abstraction simple sur des effets visuels complexes. Selon l’effet souhaité, les résultats peuvent affecter le contenu superposé à la vue ou le contenu ajouté à la vue content de la vue.

Appliquez une UIVisualEffectView à une vue existante pour appliquer un effet de flou ou de dynamisme à la vue existante. Une fois que vous avez ajouté UIVisualEffectView à la hiérarchie des vues, ajoutez les sous-vues éventuelles à la contentView de la UIVisualEffectView. N'ajoutez pas de sous-vues directement à la UIVisualEffectView elle-même.

https://developer.Apple.com/documentation/uikit/uivisualeffectview#//Apple_ref/occ/instp/UIVisualEffectView/contentView

205
cNoob

Il suffit de mettre cette vue floue sur l’imageView. Voici un exemple dans Objective-C:

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

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

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

et rapide:

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

visualEffectView.frame = imageView.bounds

imageView.addSubview(visualEffectView)
410
B.S.

Voici comment utiliser UIVibrancyEffect et UIBlurEffect avec UIVisualEffectView

Objectif 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)
133
Matt Rundle

Vous pouvez également utiliser le générateur d'interface pour créer facilement ces effets dans des situations simples. Étant donné que les valeurs z des vues dépendent de l'ordre dans lequel elles sont répertoriées dans le plan du document, vous pouvez faire glisser un UIVisualEffectView sur le plan du document avant la vue que vous souhaitez rendre floue. Cela crée automatiquement un UIView imbriqué, qui est la propriété contentView du UIVisualEffectView donné. Nichez les éléments dans cette vue que vous souhaitez voir s'ajouter au flou.

XCode6 beta5

Vous pouvez également facilement tirer parti du dynamisme UIVisualEffect, qui créera automatiquement un autre UIVisualEffectView imbriqué dans le plan du document avec le dynamisme activé par défaut. Vous pouvez ensuite ajouter une étiquette ou une vue de texte à la UIView imbriquée (encore une fois, la propriété contentView de la UIVisualEffectView) pour obtenir le même effet que l'interface utilisateur "> glisser pour déverrouiller" élément.

enter image description here

45
ohhh

Si quelqu'un veut la réponse dans 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!

Mise à jour :

Pour le moment, il est disponible sous l'IB, vous n'avez donc rien à coder pour cela :)

9
Amit Kalra

Je préfère créer des effets visuels via Storyboard - pas de code utilisé pour créer ou gérer des éléments d'interface utilisateur. Cela me donne également un soutien complet en matière de paysage. J'ai fait une petite démonstration de l'utilisation d'UIVisualEffects avec Blur et de Vibrancy.

Démo sur Github

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

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

    visualEffectView.frame = _imageView.bounds;
    [_imageView addSubview:visualEffectView];
}
2
Ananthu R Krishnan

Cela est utilisé pour rendre les arrière-plans flous, clairs ou foncés, de sorte que le texte puisse être superposé plus facilement. Vous pouvez éventuellement activer le dynamisme, ce qui provoque le rendu du texte dans une couleur vive et contrastante à côté du flou.

0
Xab Ion