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];
essayez d'ajouter un supplément de vue arrière de votre bouton (même image) et de l'ajouter en tant que sous-vue de blackMask
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