Comment puis-je utiliser les Graphiques de Base pour dessiner un cercle à mon touch emplacement?
Nouveau programmeur ici. Je vais avoir des problèmes en essayant d'utiliser des Graphiques de Base pour dessiner une caresse arc de cercle autour de mon touch emplacement. J'ai la méthode pour tracer le cercle fonctionne très bien, et je l'ai testé et je suis l'enregistrement des touches quand j'appuie sur l'écran, mais quand j'essaie d'appeler la méthode pour tracer le cercle quand je me tape, j'obtiens l'erreur "CGContextBlahBlah: contexte non valide 0x0"
Je pense que c'est parce que je ne suis pas à l'appel de la méthode drawRect:().
Alors, comment suis-je en mesure d'appeler cette méthode sur une touche? En outre, comment puis-je utiliser le "CGPoint locationOfTouch" comme paramètre dans ma méthode de tirage?
Voici le code de morceaux que je travaille avec.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint locationOfTouch = [touch locationInView:self];
[self drawTouchCircle:(locationOfTouch)];
[self setNeedsDisplay];
}
-(void)drawTouchCircle:(CGPoint)locationOfTouch
{
CGContextRef ctx= UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextSetLineWidth(ctx,5);
CGContextSetRGBStrokeColor(ctx,0.8,0.8,0.8,1.0);
CGContextAddArc(ctx,locationOfTouch.x,locationOfTouch.y,30,0.0,M_PI*2,YES);
CGContextStrokePath(ctx);
}
Merci d'avance pour l'aide!
OriginalL'auteur BendE | 2013-02-16
Vous devez vous connecter pour publier un commentaire.
Oui, vous avez raison. Le problème est que, plutôt que d'appeler
drawTouchCircle
vous-même, vous devez mettre en œuvre undrawRect
méthode qui appelle pour vous, et donc votretouches
méthode seulement besoin de faire appelsetNeedsDisplay
, etdrawRect
prendra soin du reste. Vous pourriez, par conséquent, souhaitez enregistrer le contact de l'emplacement dans une propriété de classe, et puis les récupérer dans votredrawRect
:En aparté, vous avez également dit que vous avez ajouté cette propriété pour votre .h fichier. L'émergence de la meilleure pratique est de pas ces sortes de propriétés privées déclarées dans votre .h fichier, mais plutôt de définir, dans un "cours privé d'extension" dans votre .m de fichier, comme je l'ai fait ci-dessus. De cette façon, vous n'avez pas l'exposer à d'autres classes de propriétés privées détails de l'implémentation de votre
UIView
sous-classe. Maintenant, si vous avez besoin d'autres classes pour y avoir accès, alors certainement le définir dans votre .h fichier. Mais sinon, gardez-le hors de là, et la mettre dans votre .m privé de l'extension de classe.Hmm, il semble que mon problème était dans la méthode draw, comme je l'ai été en utilisant
locationOfTouch.x
au lieu deself.locationOfTouch.x
en tant que paramètre. Si je ne suis toujours pas obtenir quoi que ce soit quand je touche. Aussi, quand j'enlève la@synthesize
je reçois un autre message d'avertissement indiquant que touché nécessite méthode setTouched être définiMerci pour les réponses! Il semble fonctionner correctement maintenant.
OriginalL'auteur Rob