Masquage d'une CALayer - iPhone

Je suis de la création d'une coutume on /off interrupteur à bascule pour le iPhone (similaire à la commutation standard) et j'en suis au point où je suis le masque du curseur, mais en l'appelant [[myView layer] setMask:maskLayer] définit la position de la couche de masque par rapport à la couche de masquage, pas par rapport au conteneur de couche de la couche de masque. Pour ce scénario particulier, la position de la couche de masque doit être définie par rapport à la couche contenant, car la bascule curseur se déplace sous le masque et le masque doit rester immobile.

Sans avoir à animer le masque ET la bascule composant de curseur pour obtenir l'effet désiré, quelqu'un sait comment faire ce travail? Voici ce que j'ai obtenu jusqu'à présent:

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef path = CGPathCreateMutable();

CGPathAddEllipseInRect(path, nil, CGRectMake(0, 0, 13, 13));
CGPathAddEllipseInRect(path, nil, CGRectMake(30, 0, 13, 13));
CGPathAddRect(path, nil, CGRectMake(6, 0, 32, 13));

[maskLayer setPath:path];
[maskLayer setFillColor:[[UIColor greenColor] CGColor]];

[[self layer] addSublayer:maskLayer];

[maskLayer setPosition:CGPointMake(2, 2)];

[self addSubview:toggleView];

[[toggleView layer] setMask:maskLayer];
Si ce code n'est pas à l'aide de l'ARC, path est en fuite.

OriginalL'auteur jtrim | 2010-02-15