2010-02-27 10 views
0

Je suis en train de faire une application iPhone où il y a deux ImageViews et quand vous touchez le dessus, où que vous tapiez, celui du bas montre à la place.Comment découper ou modifier l'alpha d'une image (pixels) dans Quartz?

Fondamentalement, ce que je veux faire est de couper une ellipse/arrondi sur une image. Pour ce faire, je pensais soit à écrêter l'image, soit à changer les pixels alpha dans le rect à zéro. Je suis nouveau à la programmation 2D Quartz donc je ne suis pas sûr de savoir comment faire cela.

En supposant que j'ai:

UIImageView *topImage; 
UIImageView *bottomImage; 

Comment puis-je supprimer un CGRect/Ellipse/roundedRect de ces images. C'est un peu comme ces billets de loterie que vous devez gratter pour révéler si vous avez gagné.

Répondre

1

J'essayerais généralement de créer un masque à partir d'un chemin (contenant ici un rectangle arrondi), puis de masquer l'image avec, comme démontré dans le apple docs. L'un des avantages de ceci est que pour le test de hit tout ce que vous devez faire est CGPathContainsPoint avec le point qui a été touché (car il va tester si elle était dans la zone visible de l'image).

+0

Alors, que dois-je mettre dans la méthode drawrect pour cela? Je ne suis pas expérimenté avec Quartz – gizmoitai

+0

donc la section des documents concernant l'écrêtage réel est en bas (désolé j'ai oublié de le mentionner), mais fondamentalement créer un chemin, dessiner un rectangle arrondi où vous le voulez, couper le contexte sur le chemin, dessinez l'image, (déclippez le chemin?) et continuez. Je n'inclue pas de code spécifique parce que c'est inutile, il suffit de fouiller dans les documents Apple pour les appels de fonction. google aussi. Heres quelque chose pour le chemin rect arrondi http://www.drobnik.com/touch/2010/02/drawing-rounded-rectangles/ –

+0

J'ai essayé ce code: CGContextRef CTX = UIGraphicsGetCurrentContext(); \t CGRect frame = CGRectMake (100, 100, 100, 100); \t CGPathRef roundedRectPath = [self newPathForRoundedRect: rayon de trame: 5]; \t CGContextAddPath (ctx, roundedRectPath); \t CGContextClip (ctx); \t CGPathRelease (roundedRectPath); (Avec la fonction rectangle arrondi que vous avez envoyé) Ceci est sur une vue blanche et sous la vue il y a une fenêtre grise, donc je pensais que cela montrerait juste gris au lieu de blanc dans le cadre CGRect mais ce n'était pas le cas quoi que ce soit ... – gizmoitai

0

J'ai essayé ce code:

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGRect frame = CGRectMake(100, 100, 100, 100); 
CGPathRef roundedRectPath = [self newPathForRoundedRect:frame radius:5]; 
CGContextAddPath(ctx, roundedRectPath); 
CGContextClip (ctx); 
CGPathRelease(roundedRectPath); 

(avec la fonction de chemin rect arrondi vous avez envoyé) C'est une vue blanc et sous la vue il y a une fenêtre grise, donc je pensais que ce serait juste montrer gris au lieu de blanc dans le cadre CGRect mais il n'a rien fait ...

+0

vous devez mettre ce que vous voulez vraiment dessiner entre le clip de contexte et la libération du chemin (par exemple dessiner l'image, probablement dans 'frame') –

+0

Ok, j'ai essayé d'ajouter ceci avant de libérer le chemin: [ bottomImage.image drawInRect: frame]; Tout ce qu'il a fait était de dessiner l'image à nouveau dans le cadre, évidemment ... Ce n'est pas ce que je veux faire. Je veux découper le cadre à l'intérieur de l'image. Alors qu'il y a un espace transparent au milieu de l'image. – gizmoitai