私はUIScrollView
で作られたカスタムマップビューを持っています。スクロールビューのサブビューには、CATiledLayer
が付いています。すべてここで素晴らしい作品です。パンニング&ズームは、新しいマップタイルをロードし、すべてがうまく機能します。UIScrollViewのCATiledLayerでバックアップされたビューのイメージスナップショットを取る
私がしたいことは、アニメーションのビデオのフレームをこのスクロールビューにキャプチャすることです。基本的には、スクロールビューのcontentOffset
とzoomScale
のアニメーション化された変更のビデオを作成したいと思います。
プライベートAPI関数UIGetScreenImage()
を取得して、たとえば10fpsでアプリの画面をキャプチャし、これらの画像を結合し、スムーズに再生されたアニメーションを得ることができます。スクロールビューのアニメーション。
私の問題はもちろん、プライベートAPIを使用できないということです。 Apple hereで概説されている代替案を試してみると、CALayer
にrenderInContext
と尋ねて、それからUIGraphicsGetImageFromCurrentImageContext()
を取って、かなり有効なオプションを私に残します。
これはちょっとCATiledLayer
のバックビューでは動作しないようです。ブロックがあり、ズームされていない画像は、高解像度のタイルがロードされないかのように、キャプチャされたものです。これは、CATiledLayer
がパフォーマンスのためにバックグラウンドスレッドを描画し、メインスレッドからrenderInContext
を呼び出すとこれらの更新をキャッチしない可能性があることを考えると、やや意味があります。タイルレイヤのpresentationLayer
もレンダリングしても結果は同じです。
CATiledLayer
バックビューの画像をAppleが許可している方法でキャプチャしているスクロールビューのアニメーション中に表示されますか?それとも、いつでも問題になっていますか?
誰かがここで答えを投稿しました:http://stackoverflow.com/questions/5526545/render-large-catiledlayer-into-smaller-エリア –