56 votes

Simplement masquer un UIView avec un rectangle

Je veux savoir comment tout simplement le masque de la zone visible d'une UIView de toute nature. Toutes les réponses/tutoriels que j'ai lu jusqu'à présent décrire de masquage avec une image, un gradient ou de créer des coins arrondis qui est beaucoup plus avancé que ce que je suis après.

Exemple: j'ai une UIView avec les limites (0, 0, 100, 100) et je veux couper la moitié droite de la vue à l'aide d'un masque. Donc mon entourage serait (0, 0, 50, 100).

Une idée de comment faire ça simplement? Je ne veux pas surcharger la méthode drawrect depuis ce devrait être applicable à toute UIView.

J'ai essayé cela, mais il est tout à fait le point de vue invisible.

CGRect mask = CGRectMake(0, 
                         0,
                         50,
                         100);
UIView *maskView = [[UIView alloc] initWithFrame:mask];

viewToMask.layer.mask = maskView.layer;

130voto

Accatyyc Points 2154

Grâce au lien de MSK, voici comment je suis allé et qui fonctionne bien:

 // Create a mask layer and the frame to determine what will be visible in the view.
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGRect maskRect = CGRectMake(0, 0, 50, 100);

// Create a path with the rectangle in it.
CGPathRef path = CGPathCreateWithRect(maskRect, NULL);

// Set the path to the mask layer.
maskLayer.path = path;

// Release the path since it's not covered by ARC.
CGPathRelease(path);

// Set the mask of the view.
viewToMask.layer.mask = maskLayer;
 

22voto

Geri Points 3572

Pas besoin de masque du tout. Il suffit de le placer dans une vue wrapper avec le cadre plus petit et de définir clipsToBounds .

 wrapper.clipsToBounds = YES;
 

1voto

A-Live Points 5395

Une option de calque dont le canal alpha est utilisé comme un masque pour sélectionner entre la couche de fond et le résultat de la composition de la la couche du contenu avec son filtré arrière-plan.

@property(conserver) CALayer *masque

La façon correcte de faire ce que vous voulez est de créer de l' maskView de la même image (0, 0, 100, 100) comme l' viewToMask la couche sur laquelle vous souhaitez masquer. Ensuite, vous devez définir la clearColor pour le chemin que vous voulez rendre invisible (ce qui permet de bloquer la vue de l'interaction sur le chemin donc être prudent avec le point de vue de la hiérarchie).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X