2010-04-03 7 views
7

Hier ist der Code, den ich zu zeichnen verwenden:Warum gibt es einen ungültigen Kontextfehler?

- (void) drawSomething 
{ 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(context, 1, 0, 0, 1); 
    CGContextSetLineWidth(context, 6.0); 

    CGContextMoveToPoint(context, 100.0f, 100.0f); 
    CGContextAddLineToPoint(context, 200.0f, 200.0f); 
    CGContextStrokePath(context); 

    NSLog(@"draw"); 

} 

Aber ich habe den Fehler wie folgt aus:

[Session started at 2010-04-03 17:51:07 +0800.] 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextSetRGBStrokeColor: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextSetLineWidth: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextMoveToPoint: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextAddLineToPoint: invalid context 
Sat Apr 3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextDrawPath: invalid context 

Warum es mich aufgefordert, zu sagen, dass der Kontext zum Invaliden wird?

+0

Von was rufen Sie drawSomething ab? Was sollte der aktuelle Kontext dann sein? –

+0

es von meiner init-Methode aufgerufen. aktueller Kontext ist nicht die aktuelle Ansicht? – Tattat

Antwort

12

Wie the documentation sagt:

Der aktuelle Grafikkontext standardmäßig null ist. Vor dem Aufruf der drawRect: -Methode schieben die View-Objekte einen gültigen Kontext auf den Stack und machen ihn aktuell.

So müssen Sie diesen Code setzen in der drawRect Methode

+0

immer noch nicht bekommen – Tattat

+4

Das iPhone OS ist so gebaut, dass der grafische Kontext (zugänglich für uns über UIGraphicsGetCurrentContext()) nur erstellt wird, wenn sie benötigt werden. Dies ist erforderlich, wenn Sie etwas zeichnen möchten, also in der drawRect: Methode, die Sie in Ihrer Klasse überschreiben werden. Auch wenn Sie direkt drawRect: aufrufen können, rät Ihnen die iPhone SDK-Dokumentation nicht. Also anstatt nur Ihre Methode removeSomething umzubenennen: um drawRect: und aufzurufen, was funktionieren würde, rate ich Ihnen, dies zu tun, aber rufen setNeedsDisplay wie @Brad Larson sagte Ihnen zu;) –

+0

thz Jungs, du bist sehr hilfreich. – Tattat

8

Von my answer zu this similar question:

Wenn dies auf den Bildschirm gezeichnet werden soll, müssen Sie Ihren Zeichencode innerhalb lokalisieren die -drawRect: Methode eines UIView (oder –drawInContext: eines CALayer). Um seinen Inhalt zu aktualisieren, müssen Sie -setNeedsDisplay auf der UIView oder CALayer aufrufen. Wenn Sie zu einem anderen Zeitpunkt zeichnen, wird der Fehler "ungültiger Kontext" angezeigt.

Siehe auch this question.

Verwandte Themen