Mam niestandardowy widok mapy, który składa się z UIScrollView
. Podgląd widoku przewijania jest wspierany przez CATiledLayer
. Wszystko działa tutaj świetnie. Przesuwanie powiększenia ładuje nowe kafelki mapy i wszystko działa dobrze.Robienie migawek obrazu widoku CATiledLayer w widoku UIScrollView
Co chcę zrobić, to przechwytywać klatki wideo animacji do tego widoku przewijania. Zasadniczo chcę utworzyć wideo animowanych zmian w widoku przewijania contentOffset
i zoomScale
.
Wiem, że koncepcja jest dobra, ponieważ mogę uzyskać funkcję prywatnego interfejsu API UIGetScreenImage()
, aby uchwycić ekran aplikacji przy powiedzmy 10 klatek na sekundę, połączyć te obrazy i uzyskać animacje odtwarzania, które są płynne i mają krzywe taktowania używane przez animacje widoku przewijania.
Mój problem polega na tym, że nie mogę korzystać z prywatnego API. Przejście przez alternatywy opisane przez Apple here pozostawia mi prawie jedną rzekomo ważną opcję: prosząc o CALayer
do renderInContext
i biorąc UIGraphicsGetImageFromCurrentImageContext()
z tego.
To jednak nie działa z widokami w widoku wstecznym. Zablokowany, nieukierunkowany obraz jest przechwytywany, tak jakby płytki o wyższej rozdzielczości nigdy się nie ładowały. To trochę ma sens, biorąc pod uwagę, że CATiledLayer
rysuje w wątkach tła dla wydajności i wywoływanie renderInContext
z głównego wątku może nie przechwycić tych aktualizacji. Wynik jest podobny, nawet jeśli renderuję warstwę kafli presentationLayer
.
Czy jest obsługiwany przez Apple sposób przechwytywania obrazu z widoku animacji zawierającego program przewijania? A może w którymkolwiek momencie?
Ktoś pisał odpowiedź tutaj: http://stackoverflow.com/questions/5526545/render-large-catiledlayer-into-smaller- obszar –