2010-03-14 16 views
7

Necesito tomar un UIImage de un UITextView o UILabel. Tengo un método que extraerá una imagen con éxito de otros tipos de vistas ([UIViewController view], MKMapView, UIButtons) pero solo estoy obteniendo un rect blanco para mi UITextView.tirando de un UIImage de un UITextView o UILabel da imagen en blanco

he estado golpeando mi cabeza contra la pared por un tiempo y algo sospechoso muy, muy básico.

muchas gracias!

@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]]; 

} 

y la grabImage partir de un código UIView

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

    UIGraphicsBeginImageContext(viewToGrab.bounds.size); 

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

Es un UIImage, no un UIImage, como se pronuncia la U como "usted", no "ooh-eee-imagen". –

+0

Es por eso que hice "un UIImage" y "un UITextView". Fue un tipo de respuesta al dilema de los prisioneros, prefiero estar en la mitad de lo correcto, totalmente equivocado ... realmente, fue intencional ... realmente. :) – Oldmicah

+0

Para obtener una imagen nítida en la retina muestra también, que necesitaba para reemplazar 'UIGraphicsBeginImageContext (viewToGrab.bounds.size);' por esto: 'UIGraphicsBeginImageContextWithOptions (self.bounds.size, self.opaque, 0.0);' como pedido en [esta pregunta] (http://stackoverflow.com/q/4334233/2471006) y explicado en su respuesta aceptada. Quizás desee actualizar su respuesta, incluida esa información. – anneblue

Respuesta

3

la técnica es correcta. Tal vez es porque el texto está volteado. Podría intentar establecer una transformación para el sistema de coordenadas y el origen. Como lo haría normalmente al dibujar texto.

+0

Hola St3fan, Gracias. Tomé en serio lo que me dijiste y volví a comprobar el tamaño y la orientación de la imagen resultante, con la intención de manipular la imagen como sugeriste. En algún lugar de la refactorización de código intermedio, reestructuración de plumilla y reinicio, comenzó a funcionar. Mi teoría de trabajo en este momento es que no tuve la vista de desafío desafíoTexto conectado correctamente o que el código de captura de imagen se llamaba antes de que la vista se dibujara en la pantalla. De cualquier manera, el código anterior parece funcionar y ¡gracias a todos por echarle un vistazo! . – Oldmicah

0

Estaba teniendo el mismo problema, obteniendo un rect blanco en lugar del texto. Para resolver esto, en lugar de usar UIGraphicsBeginImageContext utilicé UIGraphicsBeginImageContextWithOptions y pasé NO por opaco (segundo argumento), eso hizo el truco.

también pasó a escala 0.0 (tercer argumento) y para obtener un contexto con un factor de escala igual a la de la pantalla (para quedar bien en el dispositivo de retina en mi caso).

Comprobar el documento de Apple sobre UIGraphicsBeginImageContextWithOptionshere.

Cuestiones relacionadas