2010-04-03 16 views
7

Ecco il codice che uso per disegnare:Perché c'è un errore di contesto non valido?

- (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"); 

} 

ma ho avuto l'errore come questo:

[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 

Perché chiede conferma me dire che il contesto è invalido?

+0

Da cosa chiami drawSomething? Quale dovrebbe essere il contesto attuale allora? –

+0

chiamato dal mio metodo init. il contesto attuale non è la vista corrente? – Tattat

risposta

12

Come the documentation dice:

L'attuale contesto grafico è pari a zero per impostazione predefinita. Prima di chiamare il suo drawRect: metodo, visualizzare gli oggetti spingere un contesto valido nello stack, rendendolo attuale.

Quindi è necessario inserire questo codice nel metodo drawRect

+0

ancora non capisci che – Tattat

+4

Il sistema operativo dell'iPhone è stato creato in modo tale che il contesto grafico (accessibile a noi tramite UIGraphicsGetCurrentContext()) venga creato solo quando necessario. Ciò è necessario quando vuoi disegnare qualcosa, quindi in drawRect: metodo che dovrai sovrascrivere nella tua classe. Anche se è possibile chiamare direttamente drawRect :, la documentazione dell'SDK di iPhone consiglia di non farlo. Quindi, invece di ridenominare il tuo metodo drawSomething: per disegnareRect: e chiamarlo, che funzionerebbe, ti consiglio di farlo, ma chiama setNeedsDisplay come @Brad Larson ti ha detto di;) –

+0

thz, sei molto utile. – Tattat

8

Da my answer a this similar question:

Se questo deve essere disegnato sullo schermo, è necessario individuare il codice di disegno all'interno il metodo -drawRect: di un UIView (o –drawInContext: di un CALayer). Per aggiornare i suoi contenuti, è necessario chiamare -setNeedsDisplay su UIView o CALayer. Il tentativo di disegnare in qualsiasi altro momento causerà l'errore "contesto non valido" che stai vedendo.

Vedere anche this question.

Problemi correlati