6
votes

Comment faire un effet de vignette sur iOS?

Lorsque Uialertviews apparaît, il y a un effet de vignette à l'arrière-plan. C'est-à-dire que les bords sont plus sombres et le centre est plus léger.

vignette ios

Je me demandais si cet effet de vignette a été intégré à Cocoa Touch. Je voudrais montrer la vignette derrière une de mes vues personnalisées.


6 commentaires

Je me suis demandé ça aussi! La plupart des applications qui affichent des alertes personnalisées ou des icônes HUD giftent simplement sur une superposition noire transparente solide qui a l'air vraiment mauvaise.


Vous pourriez probablement juste faire cela en utilisant une boîte à encadrement, je suis un développeur Web, c'est donc tout ce que je peux vraiment dire


@James Kyle: Ce n'est pas un site web. C'est une application.


ouais je sais, mais tu ne peux pas utiliser CSS sur iOS


Pas en dehors d'une vision Web, laquelle la plupart des applications ne le sont pas.


github.com/jdg/mbprogresshud fait cet effet.


5 Réponses :


3
votes

It est intégré à Uikit (comme UialertView fait partie de Uikit), mais ce n'est pas public.

Il ne devrait pas être trop difficile de créer le même effet, cependant. C'est juste un gradient radial, que vous pouvez dessiner dans le code ou Photoshop.

update: si vous devez DO sais, l'arrière-plan est une classe appelée < Code> _UialertNormalizingOverLayWindow avec la hiérarchie de la classe suivante: xxx


1 commentaires

L'application ne sera-t-elle pas rejetée pour l'utilisation de produits sans papiers?




1
votes

svprogresshud fait ce type d'effet, examine le code où SvProgresshudmasktypegradient est détaillé.


0 commentaires


3
votes

Créer une classe appelée Vigneteeffect code> en tant que sous-classe de uiview code>

Ajouter ce code à votre -Drawrect: Code> Méthode: P >

- (void)drawRect:(CGRect)rect
{

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGColorSpaceRef colSp = CGColorSpaceCreateDeviceRGB();

    CGGradientRef gradient = CGGradientCreateWithColors(colSp, (__bridge CFArrayRef)[NSArray arrayWithObjects:(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] CGColor], (id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor], nil], 0);

    CGContextDrawRadialGradient(context, gradient, self.center, 0, self.center, self.frame.size.height+self.frame.size.height/4, 0);

    CGColorSpaceRelease(colSp);
    CGGradientRelease(gradient);

}


3 commentaires

C'est une belle solution, mais c'est lent. Je recommanderais d'aller avec une image prérogée.


@Leonatan True, mais en termes de personnalisation, il s'agit d'une solution plus appropriée.


Belle solution de goutte pour moi. Merci!