J'essaie de créer un contrôleur similaire à Control Center sous iOS7. Depuis la session n ° 226 de la WWDC, j'ai appris à obtenir une image floue avec différents effets.
UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);
[view drawViewHierarchyInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lightImage = [newImage applyLightEffect];
Donc, en d'autres termes, nous capturons simplement une image (créer une capture d'écran), effectuons un effet de flou et utilisons cette image floue pour nos besoins.
Mais si vous ouvrez le centre de contrôle au-dessus d’un contenu dynamique, vous remarquerez que l’arrière-plan flou du centre de contrôle change tout comme le contenu.
Est-ce que quelqu'un sait comment reproduire ce comportement?
La seule façon dont je le vois est de capturer le contenu et de créer un effet de flou avec un intervalle (par exemple, une demi-seconde). Mais ça a l'air redondant.
Voici les solutions prêtes que j'ai trouvées:
1. Le plus inattendu: Utilisez UIToolBar
- (id) initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
[self setup];
}
return self;
}
- (id) initWithCoder:(NSCoder *)coder
{
if ((self = [super initWithCoder:coder]))
{
[self setup];
}
return self;
}
- (void) setup
{
if (iOS7OrLater)
{
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
toolbar.barTintColor = self.tintColor;
[self insertSubview:toolbar atIndex:0];
}
}
UIToolbar peut être utilisé pour ces besoins, car il a son seul mécanisme de flou intégré, et ce mécanisme est dynamique, ce qui est bien. Mais la mauvaise chose est que, pour une raison quelconque, il ignore les couleurs et donne un aspect irréprochable à l'arrière-plan ...
Mettre à jour:
Pour éviter toute rupture de couleur, n'utilisez pas barTintColor. Vous pouvez également modifier le style de la barre d’outils si vous souhaitez un flou sombre (utilisez UIBarStyleBlack).
2. FXBlurView .
Contrairement à la barre d'outils, il est plus positif, mais son mécanisme dynamique est encore rare et, en fait, il ne peut être utilisé que pour un fond statique. (dynamique = NON).
Dans iOS8, nous pouvons implémenter l'effet de flou sur les vues à l'aide de UIVisualEffect class.
Vous pouvez utiliser le code ci-dessous pour appliquer un effet de flou sur la vue.
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = MYview.bounds;
[MYview addSubview:visualEffectView];
LiveFrost est un projet génial et facile à intégrer pour le flou dynamique.
Vous pouvez utiliser UIVisualEffect à partir du storyboard.
Faites glisser l'effet visuel avec le flou sur le storyboard. L'effet souhaité peut être obtenu en réglant l'alpha de BACKGROUND COLOR. Les sous-vues doivent être ajoutées à la vue Vue de l'effet visuel et elles ne sont pas affectées par le flou d'arrière-plan.
L'effet Vibrance doit être sélectionné dans les options d'affichage ci-dessus.
Voir l'image:
L'utilisation de la barre de navigation pour créer un flou ne fonctionnera pas sur les appareils plus anciens exécutant iOS 7. Les versions plus légères d'iOS 7 étant presque inexistantes