Masque une UIView avec une découpe cercle
J'ai créé un UIView
avec une semi-transparent fond noir à siéger au sein de mon application principale. Ce que je vise ici est de créer une découpe cercle de la forme quelque part dans cette UIView
où le semi-transparent fond noir n'est pas vu, ce qui donne l'effet d'un masque noir sur l'ensemble de l'image à l'exception de la zone circulaire (c'est pour souligner un bouton dans cette zone).
J'ai réussi à utiliser CAShapeLayer
pour créer un masque circulaire, mais cela a eu l'effet inverse (c'est à dire le reste de la vue est dégagée, et à l'INTÉRIEUR du cercle est le semi-transparent noir. Ce que j'aimerais c'est tout, à l'extérieur du cercle de garder le semi-transparent noir, alors que l'intérieur soit bien clair. Voici le code que j'ai utilisé, comment pourrais-je aller sur le faire fonctionner dans l'autre sens? Mon blackMask
est semi-transparent noir vue, et mon buttonCircle
est le cercle, je voudrais être tenus à l'écart.
Peut-être j'ai besoin d'inverser le chemin, en quelque sorte?
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGRect maskRect = buttonCircle.frame;
CGPathRef path = CGPathCreateWithEllipseInRect(maskRect, NULL);
maskLayer.path = path;
CGPathRelease(path);
blackMask.layer.mask = maskLayer;
EDIT: Essayez-le maintenant, ne voyant aucun masque tout avec celui-ci:
UIView *circularMaskView = [[UIView alloc] initWithFrame:buttonCircle.frame];
circularMaskView.backgroundColor = [UIColor greenColor];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGPathRef path = CGPathCreateWithEllipseInRect(buttonCircle.frame, NULL);
maskLayer.path = path;
CGPathRelease(path);
circularMaskView.layer.mask = maskLayer;
[blackMask addSubview:circularMaskView];
Cela ne fonctionne pas, le bouton lui-même n'est pas un cercle. Je veux juste dessiner un cercle autour d'elle.
je veux dire créer un nouveau point de vue, de définir la couleur d'arrière-plan à somevalue(non transparent).ensemble cadre de ce nouveau point de vue même que buttonCircle.cadre. appliquer le masque à cette nouvelle Vue (path =buttonCircle.de limites) et de l'ajouter en tant que sous-vue de blackMask.
Créer un chemin inverse de comme this?
Cela ne semble pas fonctionner avec
[UIColor clearColor]
. Je peux faire un masque vert ou quelque chose qui est la bonne couleur, la position, etc., mais si j'ai mis la couleur claire, il ne fonctionne pas. J'ai vérifié opaque
sur le nouveau point de vue.OriginalL'auteur Luke | 2014-01-20
Vous devez vous connecter pour publier un commentaire.
Donc, voici ce que j'ai fait. J'ai créé un custom
UIView
sous-classe appeléeBlackoutView
, comme suit:BlackoutView.h
BlackoutView.m
J'ai ensuite instancier comme d'habitude, et de définir les propriétés de la couleur du masque que je veux utiliser, et les vues à couper le masque:
Ce pourrait être amélioré en ce qui me permet de couper d'autres formes d'ailleurs ovales, mais c'est très bien pour mes besoins, ici et pourrait être facilement adapté à le faire plus tard. Espérons que cela aide les autres!
Aussi, avez-vous besoin d'ajouter
CGContextRelease(context);
à la fin dedrawRect:rect
(passons sur le fait, il a fait de mauvaises choses)
J'en ai essayé beaucoup de solutions, mais cela m'a vraiment aidé! Merci beaucoup 🙂
Je viens de mettre la couleur d'arrière-plan à l'aide de la norme
backgroundColor
et enlevé lefillColor
propriété et les deux premières lignes dansdrawRect
. Réglage de lafillColor
encore abouti à un solide de couleur noire. Je suis en train de travailler sur iOS8, cependant, je ne suis pas sûr que cela n'a rien à faire avec elle.OriginalL'auteur Luke
Si Vous utilisez une Image en Noir pour le masque, puis
Si vous avez Personnalisé ShapeLayer de masque
Si Vous voulez faire de l'ImageView Masque avec le Cercle
OriginalL'auteur Mrug
Voici ma conversion de la accepté de répondre à dans Swift:
OriginalL'auteur tommys