Vai al contenuto

[RISOLTO] Problema nel disegnare


Messaggi raccomandati

Salve ragazzi,

mi sto cimentando da poco sulla programmazione per iphone e mi sono bloccato su un esercizio di per se semplice ma di cui mi sfugge la sintassi corretta.

In particolare l'obiettivo era di creare una piccola applicazione che, alla pressione di un tasto, disegni una figura.

Il problema è che non ho ben chiara la sintassi corretta da utilizzare...a quanto ho capito è necessario sovrascrivere il metodo (void)drawRect: (CGRect)rect; e utilizzare il metodo (void)setNeedsDisplay; per invocarlo, entrambe cose che ho fatto; nonostante ciò però non riesco a visualizzare nulla.

In effetti il metodo drawRect non viene proprio chiamato... (ho inserito una UILabel in modo che venga visualizzato un messaggio al momento della chiamata, ma la scritta non si aggiorna).

Il programma è così strutturato: Window-based application con due classi (Controller, Painter), una view, una label e un bottone.

Controller è la seguente:

@interface Controller : NSObject {
IBOutlet Drawer *drawer;
}

- (void)draw;
@end

Il metodo draw è collegato al bottone, la sua implementazione è semplicemente:

- (void) draw {
[drawer setNeedsDisplay];
}

Alla pressione del bottone draw viene invocato ma non drawRect, che è stato reimplementato nella classe Drawer...

Probabilmente si tratterà di qualcosa di parecchio banale, ma se qualcuno potesse darmi dei lumi ne sarei grato :rolleyes:

Link al commento
Condividi su altri siti

Ma cos'è drawer?

Se è l'oggetto che si occupa del disegno, deve essere una sottoclasse ti UIView.

E deve implementare il metodo drawRect: nel quale avviene il disegno (e il codice lo devi scrivere tu).

Il quale a sua volta viene chiamato, se necessario, con setNeedDisplay.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

si scusate ho sbagliato a scrivere: le classi non sono Controller e Painter ma Controller e Drawer.

Drawer, come dici tu, estende UIView e implementa il metodo drawRect (che nella fattispecie si occupa soltanto di aggiornare la scritta della label).

Il codice è semplicemente:

//Drawer.h
@interface Drawer : UIView {
       IBOutlet UIView *view;
       IBOutlet UILabel *label;
}
@end

//Drawer.m
@implementation Drawer

-(void) drawRect:(CGRect)rect {
      label.text = @"drawRect called";
}
@end

Link al commento
Condividi su altri siti

Teoricamente dovrebbe funzionare, ma è difficile dire dove sia il problema, non avendo il progetto sotto mano.

Potrebbe anche essere che non hai impostato bene qualche collegamento in IB.

Per controllare se un metodo viene chiamato ti conviene usare la funzione NSLog(), così lo vedi subito da console e eviti il rischio di mancati aggiornamenti dell'interfaccia.

Inizia cambiando il meto in questo modo e vedi che dice:

//Drawer.m
@implementation Drawer

-(void) drawRect:(CGRect)rect {
      NSLog(@"drawRect called");
}
@end

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Provando con NSLog risulta solo la chiamata a draw, mentre drawRect non viene chiamata...

Se vuoi ho uppato il progetto su mediafire, così puoi darci un'occhiata direttamente.

Ho riguardato il .xib ma i collegamenti sembrano tutti fatti...

Link al commento
Condividi su altri siti

Provando con NSLog risulta solo la chiamata a draw, mentre drawRect non viene chiamata...

Se vuoi ho uppato il progetto su mediafire, così puoi darci un'occhiata direttamente.

Ho riguardato il .xib ma i collegamenti sembrano tutti fatti...

Ho guardato il progetto solo adesso.

Ma è chiaro il perché non ti funzioni.

Hai impostato l'oggetto Drawer come semplice oggetto (cubo giallo) e non come view.

In pratica l'oggetto viene istanziato, ma non facendo parte di nessuna superview non viene disegnato.

E di conseguenza non chiama il metodo drawRect:.

Devi impostare come Drawer una view, al posto del cubo blu.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...