2010-05-04 3 views
18

Come chiamare drawRect in modo programmatico nell'obiettivo c?Come chiamare drawRect in modo programmatico nell'obiettivo c

Voglio chiamare il metodo drawrect di una vista nel mio UItabbarcontroller. Come posso farlo? Grazie in anticipo ..

Modifica

devo chiamare quando la vista non è visibile attualmente. Sarà la prima volta che devo chiamare quella vista

+4

Perché si vuole disegnare una vista senza realmente mettere sullo schermo? Inoltre, non dovresti mai chiamare 'drawRect:' direttamente (eccetto 'super'). – bddckr

+0

Supponi di non selezionare Prima scheda, dopo l'avvio dell'app. Dalla seconda opzione di tabulazione voglio mostrare la prima scheda con le modifiche del contenuto. Le modifiche di contenuto significano che devo modificare UITextfield ecc. Ora quello che sta succedendo è la prima volta che il campo di testo della mia scheda selezionata non cambia. Ma quando selezionerò di nuovo, cambierà. –

risposta

35
[myView.layer display]; 

forze al fine di disegnare per sé immediatamente.

[myView setNeedsDisplay: YES]; 

Forza la visualizzazione del ridisegno sul ciclo del ciclo di eventi successivo.

Tuttavia, se è necessario chiamarlo anche quando non è visibile, penso che ci sia qualcosa di sbagliato nel design della classe di visualizzazione. Dovresti disegnare solo all'interno di drawRect: non altro. E se stai facendo solo il disegno, perché farlo quando la vista non è visibile?

+0

C'è un caso in cui si desidera renderlo fuori dallo schermo, e cioè quando si intende utilizzare il contenuto della vista (ad esempio, prendere uno screenshot di esso o simile) e memorizzarlo nella cache o utilizzarlo altrove. Nel mio caso, voglio prendere uno screenshot di una vista che non è necessariamente vista dall'utente e salvare l'immagine della vista sul disco. – Kalle

+2

Non sono sicuro di aver capito questa soluzione. 'UIView' non ha un metodo' display'. –

+2

Sono anche confuso per lo stesso motivo ... –

4
+0

Grazie per la risposta. Ma setNeedsDisplay chiamerà solo se la vista è visibile. Nella mia condizione la vista non sarà visibile. Scusate. la mia domanda era fuorviante. Ho modificato la mia domanda –

0

view.layer.renderInContext(context: CGContext) può disegnare il contenuto della vista in un CGContext, ad es. una bitmap.

view.snapshotViewAfterScreenUpdates(afterUpdates: Bool) fornisce un'istantanea della vista.

1

Swift:

yourView.setNeedsDisplay() 

o

yourView.setNeedsDisplay(newRect)