Wie kann ich mithilfe von Core Graphics zu zeichnen Sie einen Kreis auf meine Berührung Lage?
Neuen Programmierer hier. Ich habe Probleme, versucht die Core-Grafiken zu zeichnen, streichelte Bogen um meine Note location. Ich habe die Methode zum zeichnen des Kreises gut funktioniert, und ich habe getestet und bin Registrierung berührt, wenn ich auf den Bildschirm tippe, aber wenn ich versuche, rufen Sie die Methode zum zeichnen des Kreises, wenn ich Tippen Sie auf, bekomme ich die Fehlermeldung "CGContextBlahBlah: invalid context 0x0"
Ich denke, dass dies ist, weil ich nicht den Aufruf der Methode drawRect:().
So, wie bin ich in der Lage, rufen Sie diese Methode auf einem touch? Außerdem, wie kann ich den "CGPoint locationOfTouch" als parameter in meine draw-Methode?
Hier sind die code-Stücke, mit der ich arbeite.
-(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);
}
Vielen Dank im Voraus für die Hilfe!
InformationsquelleAutor BendE | 2013-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, du hast Recht. Das Problem ist, dass, eher als Berufung
drawTouchCircle
sich selbst, sollten Sie implementieren einedrawRect
Methode, die Anrufe für Sie, und damit Ihretouches
- Methode nur aufrufen musssetNeedsDisplay
, unddrawRect
kümmert sich um den rest. Sie könnten deshalb möchten speichern Sie die touch-Position in der Eigenschaft einer Klasse, und dann abrufen, die in IhremdrawRect
:Als ein beiseite, Sie sagte auch, dass Sie fügte hinzu, diese Eigenschaft an Ihr .h-Datei. Die entstehenden best practice ist nicht haben diese Art von private deklarierten Eigenschaften in Ihr .h-Datei, sondern definieren es in einem "privaten Klasse-Erweiterung" in Ihrem .m-Datei, wie ich oben. Auf diese Weise, Sie don ' T setzen Sie andere Klassen zu Eigenschaften, sind die privaten Implementierungsdetails für Ihre
UIView
Unterklasse. Nun, wenn Sie brauchen andere Klassen Zugriff haben, dann sicherlich definieren Sie es in Ihrem .h-Datei. Aber wenn nicht, halten Sie es aus, und legen Sie es in Ihrem .m privaten Klasse-Erweiterung.Hmm, es scheint, mein Problem war in der draw-Methode, wie ich war mit
locationOfTouch.x
stattself.locationOfTouch.x
als parameter. Ich bin zwar immer noch nicht alles, wenn ich berühre. Auch, wenn ich entfernen Sie die@synthesize
ich bekomme eine Warnung, die besagt, dass berührt, erfordert die Methode setTouched definiert werdenDanke für die Antworten! Es scheint zu funktionieren jetzt richtig.
InformationsquelleAutor Rob