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 laUIVisualEffectView
. N'ajoutez pas de sous-vues directement à laUIVisualEffectView
elle-même.
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)
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)
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.
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.
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 :)
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.
-(void) addBlurEffectOverImageView:(UIImageView *) _imageView
{
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = _imageView.bounds;
[_imageView addSubview:visualEffectView];
}
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.