Pregunta

Tengo una interfaz de cacao que usa un argumento central. Cuando presiono un botón en la interfaz, se dibuja un diagrama. Quería crear una secuencia de gráficos llamando al método de trazado varias veces junto con llamadas a sleep () en el medio. Pero parece que a pesar de que se realiza la llamada para recargar los datos, no sucede nada hasta que la función finaliza (solo se muestra el último gráfico también). Ahora sé que existe CPAnimation, pero antes de comenzar a usarlo, me preguntaba qué es lo que sucede cuando sale la función que hace que el gráfico se actualice. ¿Tendría que ceder al hilo que se encarga de refrescar en lugar de usar el sueño?

¿Fue útil?

Solución

Ok, descubrí cómo. Llamé al método reloadData desde un método en un hilo separado (que siempre regresa). Esto se redujo a llamar a reloadData desde un IBAction y también con un NSTimer. Finalmente, en lugar de usar el sueño, usaré NSConditionLock para coordinar el procesamiento y la actualización

Otros consejos

Presumiblemente, Core Plot (o su código) establece la vista como una necesidad de visualización. Eso no sucede de inmediato; sucede cuando regresas al bucle de eventos.

Cuando usas sleep en una aplicación de Mac OS X, matas a un cachorro. Utilice NSTimer en su lugar. Haga que su método de devolución de llamada del temporizador haga el trabajo requerido para un gráfico, y establezca las variables de instancia necesarias para que el método sepa qué gráfico debe dibujar, de modo que el método dibuje cada gráfico a su vez hasta que se agote.

O, mejor aún, presente una lista de gráficos entre los que el usuario puede elegir, en lugar de hacer que el usuario vea todos los gráficos como una presentación de diapositivas. (A menos que una presentación de diapositivas explícitamente etiquetada sea lo que está implementando).

Core Plot, como la mayoría de los marcos de dibujo de Cocoa, es vago: se dibuja al final de la iteración del ciclo de ejecución. Esto es para garantizar que las cosas no se dibujen con demasiada frecuencia.

En lugar de dibujar inmediatamente, las capas se marcan como necesarias para dibujar.

Como señalaron otros, un mejor enfoque para dormir es usar NSTimer para evitar bloquear el ciclo de ejecución, o usar métodos NSObject como performSelector: withObject: afterDelay:

Peter tiene razón: el método de recarga de datos en realidad no dibuja nada. El gráfico se marca como que necesita visualización y se actualiza la próxima vez que las capas se dibujan en la pantalla. Si usa sleep , nunca tendrá la oportunidad de dibujar.

También tenga en cuenta que Core Plot es un proyecto bastante joven; CPAnimation y las clases relacionadas son stubs. Realmente no hacen nada todavía. :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top