Tengo una vista de mapa personalizada que está hecha de UIScrollView
. La subvista de la vista de desplazamiento está respaldada por CATiledLayer
. Todo funciona bien aquí. La panorámica & de zoom carga nuevos mosaicos de mapas y todo funciona bien.tomando una instantánea de imagen de la vista respaldada por CATiledLayer en UIScrollView
Lo que quiero hacer es capturar marcos de video de animaciones en esta vista de desplazamiento. Básicamente, quiero crear un video de cambios animados en la vista de desplazamiento contentOffset
y zoomScale
.
Sé que el concepto es sólido ya que puedo obtener la función de API privada UIGetScreenImage()
para capturar la pantalla de la aplicación a, digamos, 10 fps, combinar estas imágenes, y obtengo animaciones de reproducción que son suaves y las curvas de tiempo utilizadas por las animaciones de la vista de desplazamiento.
Mi problema, por supuesto, es que no puedo usar la API privada. Pasar por las alternativas descritas por Apple here me deja con casi una opción supuestamente válida: pidiendo un CALayer
a renderInContext
y tomando un UIGraphicsGetImageFromCurrentImageContext()
de eso.
Esto simplemente no parece funcionar con CATiledLayer
-backed views, though. Una imagen en bloque, sin zoom es lo que se captura, como si las fichas de mayor resolución nunca se cargaran. Esto tiene sentido, dado que CATiledLayer
dibuja hilos de fondo para el rendimiento y llamar al renderInContext
del hilo principal podría no detectar estas actualizaciones. El resultado es similar incluso si represento la capa de mosaico presentationLayer
también.
¿Existe una forma sancionada por Apple de capturar una imagen de una vista respaldada CATiledLayer
durante el curso de las animaciones de la vista de desplazamiento? O en cualquier punto, para el caso?
Alguien envió la respuesta aquí: http://stackoverflow.com/questions/5526545/render-large-catiledlayer-into-smaller- área –