Ho una vista mappa personalizzata che è composta da un UIScrollView
. La sottoview della vista di scorrimento è supportata da un CATiledLayer
. Tutto funziona alla grande qui. Panning & lo zoom carica nuove tessere mappa e tutto funziona bene.scattare un'istantanea di immagini della vista con supporto CATiledLayer in UIScrollView
Quello che voglio fare è catturare fotogrammi di video di animazioni a questa vista di scorrimento. In sostanza, voglio creare un video di modifiche animate a contentOffset
e zoomScale
della vista di scorrimento.
So che il concetto è valido in quanto è possibile ottenere la funzione API privata UIGetScreenImage()
per acquisire lo schermo dell'app, ad esempio 10 fps, combinare queste immagini e ottenere animazioni di riproduzione che sono fluide e con le curve di temporizzazione utilizzate da le animazioni della vista a scorrimento.
Il mio problema, ovviamente, è che non posso usare l'API privata. Passare attraverso le alternative delineate da Apple here mi lascia praticamente un'opzione valida: chiedere un CALayer
a renderInContext
e prendere uno UIGraphicsGetImageFromCurrentImageContext()
da quello.
Questo non sembra funzionare con viste CATiledLayer
-backed, però. Un'immagine bloccata e non ingrandita è ciò che viene catturato, come se le tessere a risoluzione più alta non venissero mai caricate. Questo ha un po 'senso dato che CATiledLayer
disegna in background thread per le prestazioni e chiamando renderInContext
dal thread principale potrebbe non catturare questi aggiornamenti. Il risultato è simile anche se eseguo il rendering dello strato piastrellato presentationLayer
.
Esiste un modo sanzionato da Apple di acquisire un'immagine di una vista CATiledLayer
backback durante il corso delle animazioni della vista di scorrimento contenente? O in qualsiasi momento, del resto?
Qualcuno ha postato la risposta qui: http://stackoverflow.com/questions/5526545/render-large-catiledlayer-into-smaller- area –