Comme les autres disent que vous devriez avoir une surface raisonnable pour l'enregistrement des événements tactiles, mais je suis sûr que vous savez que vos raisons et ont donc je vais vous dire comment je l'ai fait:
je devais faites ceci il n'y a pas si longtemps et ce que j'ai fait est ce que Sixten Otto vient de suggérer. Il y a quelques conseils à ma question initiale (section « UPDATE ») pour obtenir la valeur alpha pour votre image à un certain point:
How to create a transparent window with non-rectangular buttons?
Edit: Je suggère le sous-classement UIControl dans l'exemple ci-dessous, mais si vous n'avez pas besoin d'un comportement spécial sur votre bouton en dehors de la "non-rectangularité" de celui-ci alors juste le sous-classement d'un UIButton sans bordure mis en place avec votre PNG fera le travail et nécessitera moins de travail. Vous avez plus de contrôle sur le comportement du contrôle en sous-classant UIControl et en le faisant "à la dure".
Je suggère que vous sous-classe UIControl
et remplacer les méthodes d'événement tactile, puis vérifiez pour alpha sous le point de prise et ne pas gérer l'événement si alpha == 0
.Pour dessiner, remplacez drawRect:
et utilisez la méthode NSImage
pour dessiner votre image dans le cadre du contrôle.
Vous devez d'abord charger l'image et obtenir une représentation bitmap de celui-ci:
buttonImage = [NSImage imageNamed:@"myButtonImage"];
buttonImageRep = [[buttonImage representations] objectAtIndex:0];
Ensuite, vous pouvez dessiner à la vue du contrôle: (où stateImage est un pointeur sur l'image qui doit être faite selon si le bouton est pressé ou non)
- (void)drawRect:(NSRect)aRect {
[stateImage drawInRect:[self bounds] fromRect:NSMakeRect(0.0,0.0,[buttonImage size].width,[buttonImage size].height)
operation:NSCompositeSourceOver fraction:1.0];
}
A ce stade, vous avez dessiné votre bouton avec votre image png. Vous pouvez remplacer les méthodes d'événement tactile et gérer l'événement si l'alpha est pas 0:
NSColor *colorUnderMouse = [buttonImageRep colorAtX:mouse.x y:mouse.y];
float alpha = [colorUnderMouse alphaComponent];
C'est ce que je l'ai fait et ça fonctionne à merveille. J'espère que cela t'aides! N.B: Mon exemple est pour le Mac mais il devrait aussi fonctionner sur l'iPhone, peut-être avec de légères modifications.
Plus de détails sur exactement ce qu'il Est-ce que vous cherchez à atteindre peut vous arriver où vous voulez aller plus vite. – fbrereto