2012-02-16 10 views
5

かなり精巧なマスクやOHPには、CALayersを使用する素晴らしいカスタムUIViewがあります。私はスムーズに動作させる方法を理解するのに時間がかかりましたが、コンテナのUIViewに関連するオブジェクトをラップし、コンテナのlayer.shouldRasterizeをYESに設定し、含まれているすべてのビューのプロパティをNOに設定するとあなたのブレンドがいかに精巧であっても、バターのような滑らかさを発揮します。UIScrollViewでオフスクリーンでスクロールすると、CALayerのラスタライズが失われる

それはこのように、基本的です:

UIScrollViewの


コンテナビュー(layer.shouldRasterize = YES)

  • 子(layer.shouldRasterize = NO)
    • childOfChild( layer.shouldRasterize = NO)
  • 子(layer.shouldRasterize = NO)
  • 子(layer.shouldRasterize = NO)

コンテナ...

コンテナ...(など)


基本的に、コンテナはラスタライズ時に1つの大きなブロックイメージとして終了し、実行する必要があるラスタライゼーションの量を最小限に抑えます。しかし、これは私にとって新しい問題を作り出しました。 UIScrollViewに複数のコンテナがある場合、コンテナの1つがオフスクリーンでスクロールされるとすぐに、CoreAnimationプロファイラで「赤」というタグが付けられます。したがって、画面上をスクロールすると再びレンダリングする必要があります。これは簡単な吃音を引き起こす。コンテナのレイヤーが何度もラスタライズされなければならない理由は分かりません。誰でもこれを説明することができますか、おそらく回避策を提供できますか?ありがとう。

答えて

0

レイヤーの画像を保存することができます(レンダリング後は変更されないものとします)。次にスタティックUIImage間をスクロールします。

UIImage from CALayer - iPhone SDK

やトミーのソリューションを試すのUIViewからUIImageを作成する:

How to capture UIView to UIImage without loss of quality on retina display

トッドYandellのソリューションを試すのCALayerからUIImageを作成するには

関連する問題