2010-03-14 14 views
7

Ho bisogno di prendere una UIImage da UITextView o UILabel. Ho un metodo che estrarrà un'immagine con successo da altri tipi di viste ([vista UIViewController], MKMapView, UIButtons) ma sto solo ottenendo un rect bianco per il mio UITextView.estrarre UIImage da UITextView o UILabel dà immagine bianca

Ho sbattuto la testa contro il muro per un po 'e ho il sospetto di qualcosa di veramente, davvero di base.

molte grazie!

@interface TaskAccomplishmentViewController : UIViewController { 

    MKMapView *mapView; 
    UILabel *timeLeftText; 
    UITextView *challengeText; 

    UIButton *successButton; 

<snip> 

- (void) setChallangeImageToImageFromChallenge { 

    // works 
    // [currChallenge setChallengeImage:[UIImageUtils grabImageFromView:mapView]]; 
    // [currChallenge setChallengeImage:[UIImageUtils grabImageFromView:[self view]]]; 
    // [currChallenge setChallengeImage:[UIImageUtils grabImageFromView:successButton]]; 

    // doesn't work 
    // [currChallenge setChallengeImage:[UIImageUtils grabImageFromView:timeLeftText]]; 
    [currChallenge setChallengeImage:[UIImageUtils grabImageFromView:challengeText]]; 

} 

e il grabImage da un codice UIView

+(UIImage *)grabImageFromView: (UIView *) viewToGrab { 

    UIGraphicsBeginImageContext(viewToGrab.bounds.size); 

    [[viewToGrab layer] renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return viewImage; 
} 
+0

È un UIImage, non un UIImage, come si pronuncia l'U come "tu", non "ooh-eee-image".

+0

Ecco perché ho eseguito "UIImage" e "UITextView". Era una specie di risposta a un dilemma dei prigionieri, preferirei avere ragione a metà di quello totalmente sbagliato ... davvero, era intenzionale ... davvero. :) – Oldmicah

+0

Per ottenere un'immagine nitida anche sui display retina, avevo bisogno di sostituire 'UIGraphicsBeginImageContext (viewToGrab.bounds.size);' con questo: 'UIGraphicsBeginImageContextWithOptions (self.bounds.size, self.opaque, 0.0);' come richiesto in [questa domanda] (http://stackoverflow.com/q/4334233/2471006) e spiegato nella sua risposta accettata. Forse potresti voler aggiornare la tua risposta, comprese quelle informazioni. – anneblue

risposta

3

La tecnica è corretta. Forse è perché il testo è capovolto. Potresti provare a impostare una trasformazione per il sistema di coordinate e l'origine. Come faresti normalmente quando disegni il testo.

+0

Ciao St3fan, Grazie. Ho preso ciò che hai detto a cuore e sono tornato indietro per controllare la dimensione e l'orientamento dell'immagine risultante, con l'intenzione di manipolare l'immagine come suggerito. Da qualche parte nel codice di intervento, refactoring, ristrutturazione del pennino e riavvio, ha iniziato a funzionare. La mia teoria del lavoro al momento è che non ho avuto la visualizzazione del tema di discussione collegata correttamente o che il codice di cattura delle immagini è stato chiamato prima che la vista fosse disegnata sullo schermo. Ad ogni modo, il codice sopra sembra funzionare e grazie a tutti per dare un'occhiata! . – Oldmicah

0

Stavo avendo lo stesso problema, ottenendo un rect bianco invece del testo. Per risolvere questo, invece di usare UIGraphicsBeginImageContext ho usato UIGraphicsBeginImageContextWithOptions e passato NO per opaco (secondo argomento), questo ha fatto il trucco.

Anche passato 0.0 per la scala (terzo argomento) e per ottenere un contesto con un fattore di scala uguale a quello dello schermo (per avere un bell'aspetto nel dispositivo retina nel mio caso).

Controllare la documentazione Apple su UIGraphicsBeginImageContextWithOptionshere.

Problemi correlati