web-dev-qa-db-fra.com

effet de flou dynamique iOS 7 comme dans Control Center

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.

35
Nastya Gorban

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 ...

Toolbar effect

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).

FBBlurView effect

43
Nastya Gorban

Dans iOS8, nous pouvons implémenter l'effet de flou sur les vues à l'aide de UIVisualEffect class. 

12
petesalt

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];
7
Muhammad Rizwan

LiveFrost est un projet génial et facile à intégrer pour le flou dynamique.

https://github.com/radi/LiveFrost/

2
rounak

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: 

 

1
Sahil Kapoor

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

0
Atif Khan