2011-06-14 9 views
6

Estoy creando pequeñas imágenes de mosaico para almacenarlas en el disco y mostrarlas al usuario. Aquí está mi proceso actual para hacer esto:¿Manera segura de mostrar UIVIew a una imagen en el hilo de fondo?

  1. Crear un viewcontroller que representa la interfaz de usuario que quiero mostrar en pantalla
  2. obtener la vista de la viewcontroller y rinden una imagen de ella
  3. guardarlo en el disco y mostrarlo en pantalla más tarde

Estoy bloqueando cuando intento acceder a la vista del controlador de visualización. Cuando traté de investigar esto en línea, obtengo resultados contradictorios sobre si es seguro crear la vista en segundo plano. Estoy leyendo que la llamada a UIGraphicsGetCurrentContext debería ser segura para los subprocesos, pero ¿quizás no acceder a UIView en un hilo de fondo? Estoy escribiendo la aplicación para iOS 4 y superior. Aquí está el código que estoy usando (teja es la viewcontroller):

CGSize size = CGSizeMake(20.0f, 30.0f); 
UIGraphicsBeginImageContext(size); 
[tile.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();   
UIGraphicsEndImageContext(); 

El accidente se produce al intentar acceder a la propiedad .Ver en el azulejo (EXC_BAD_ACCESS). El objetivo es renderizar una imagen en segundo plano para evitar que se bloquee la interfaz de usuario porque hay muchas teselas que procesar.

¿Hay una manera segura de hacerlo?

+1

¿Alguna vez encontró una buena solución para esto? –

+0

Me encontré con el mismo bloqueo. En función de [la documentación de Apple] (http://developer.apple.com/library/ios/#qa/qa1714/_index.html), 'renderInContext' PUEDE utilizarse en un hilo diferente. Sin embargo, en realidad, se bloquea misteriosamente. ¿Alguien encontró una solución a este problema? – Howy

+0

¿Encontró una solución para esto, Mark? –

Respuesta

2

Nunca he intentado lo que describiste, y no me gusta ser el portador de malas noticias, pero tomado de Apple's documentation.

Nota: En su mayor parte, las clases UIKit se debe utilizar sólo de hilo principal de una aplicación . Esto es particularmente cierto para las clases derivadas de UIResponder o que impliquen manipulando la interfaz del usuario de su aplicación de cualquier manera.

Por supuesto, dicen convenientemente "En su mayor parte", por lo que deja un margen de maniobra.

+0

¿Qué tal pasar una vista sin manipularla? En este momento no estoy lidiando con la interfaz de usuario en la pantalla. Solo estoy creando una vista y guardándola en una imagen. Si no lo estoy colocando en la pantalla, ¿habría una forma segura de manejar esto? –

+0

Escribir la imagen en el disco en un hilo separado sin duda se puede hacer de forma segura. Obteniendo la imagen del calayer sin embargo ... no tengo idea de ser honesto. Supongo que todo depende de lo que ocurra dentro de 'renderInContext', pero ese tipo de información no está documentada en ningún lugar hasta donde yo sé. – Pieter

+0

Gracias, Pieter. Voy a tratar de encontrar una solución para nuestra metodología. –

Cuestiones relacionadas