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];
path
est en fuite.OriginalL'auteur jtrim | 2010-02-15
Vous devez vous connecter pour publier un commentaire.
Un masque est juste un type spécial de la sous-couche, de sorte que le superlayer du masque sera toujours la couche de masquage. Il n'y a pas moyen de contourner cela. Aussi, vous ne respectez pas cet avertissement dans la documentation:
Vous devez supprimer le
[[self layer] addSublayer:maskLayer];
ligne.Pour résoudre votre problème, je voudrais créer un autre calque ou de la vue qui contient tout ce qui est maintenant sur votre toggleView puis ajouter la couche à votre toggleLayer comme sous-couche. De cette façon, vous pouvez positionner le nouveau sous-calque indépendamment du masque et si vous déplacez le calque parent, le masque et la sous-couche se déplaceront ensemble (qui est ce qu'ils doivent faire si je vous comprends bien).
J'ai juste mis en œuvre cette solution, et il fonctionne très bien! :: gist.github.com/306792
OriginalL'auteur Ole Begemann