Pregunta

Tengo objetos que contienen referencias de cuarzo-2D (colores que describen, patrones de relleno, gradientes y sombras) en el cacao. Me gustaría poner en práctica el protocolo NSCoding en mis objetos y por lo tanto necesitan para serializar las estructuras de cuarzo-2D opacos.

Las posibles soluciones podrían ser:

  • Definir un conjunto de propiedades en mis objetos que permiten configurar las estructuras de datos desde cero cada vez que se necesiten. Los que entonces se puede serializar fácilmente. Ejemplo: Tienda cuatro flotadores para rojo, verde, azul y alfa, a continuación, utilizar CGColorCreate. Desventaja: La duplicación de la información, así la coherencia y potencial (en lo que va de menor importancia) problemas de consumo de espacio. Me necesidad de escribir manualmente los emisores de propiedad que recrean la estructura de cuarzo cada vez que un componente cambia. Que se hinchan sustancialmente mi código.

  • Leer en las propiedades utilizando las funciones de cuarzo. Ejemplo: Uso CGColorGetComponents de colores. Desventaja: Parece que funciona para los colores. Pero no hay funciones equivalentes para otras estructuras, por lo que no veo cómo esto podría funcionar para cosas como gradientes, sombras, sombras, etc.

  • Leer en las propiedades directamente desde las estructuras primas, opacas. Desventaja: Como dice la documentación, las estructuras se supone que es opaco. Por lo que en caso de que algo cambia bajo el capó, el código se romperá. (Apple ciertamente no habría proporcionado una función como CGColorGetComponents si eso se supone que debe hacerse.) Por otra parte, las cosas como el interior de un CGFunctionRef CGShadingRef realmente estarían buscando problemas.

¿Cuál es la mejor práctica para serializar estructuras de cuarzo?

¿Fue útil?

Solución

La respuesta varía bastante de una clase a la siguiente:

  • CGImage: Uso CGImageDestination para hacer un archivo TIFF de ella. (Equivalente a método TIFFRepresentation de NSImage.)
  • CGPath: Escribir una función de aplicador se puede utilizar para describir elementos de la ruta como, por ejemplo, el código PostScript. Escribir un intérprete sencilla para ir la otra dirección.
  • CGColorSpace:. Puede exportar la representación CPI
  • CGColor:. Lo que usted describe, pero no se olvide de incluir el espacio de color
  • CGLayer: enrevesado:. Hacer un contexto de mapa de bits, dibujar la capa en él, y volcar una imagen del contexto, a continuación, serializar que
  • CGFont: El nombre debe ser suficiente para la mayoría de aplicaciones. Si usted está siendo realmente de lujo (es decir, utilizando la función de variaciones), tendrá que incluir diccionario variaciones de la fuente. Vas a tener que mantener su conocimiento del tamaño de la fuente por separado, ya CGFont no tiene uno y CGContext no le permite obtener la configurada en el mismo.
  • CGPDFDocument: De un vistazo rápido, parece que CGPDFObjects son inmutables, por lo que usted acaba de archivar los datos originales del pdf o la URL lo obtuvo de un
  • .
  • CGGradient, CGPattern, CGShading, y la mayoría de otras clases: Sí, estás jodido. Usted sólo tiene que mantener toda la información que ha creado el objeto por separado.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top