UITableView
レイヤーシャドウを含む with セルがあり、そのサブビューもそうです。要約すると、セルごとに約 5 つの影があります。私は自分のセルを再利用しますが、コンテンツが特定の高さを超えると、時々高さが変わります (これは、以下に挙げる「最適化」でおそらくより多くの描画呼び出しが発生する可能性があるためです)。
さて、次の最適化を追加しました。
// setting it opaque will tell the GPU not to blend the
// layer (-> less draw calls - only useful when layer completely opaque obviously)
myShadowView.opaque = YES;
// another significant factor was the shadowPath property,
// it significantly smoothed scrolling
myShadowView.layer.shadowOffset = CGSizeMake(0, -1);
myShadowView.layer.shadowOpacity = 0.08;
myShadowView.layer.shadowRadius = 1;
myShadowView.layer.shadowPath = [UIBezierPath bezierPathWithRect:shad.bounds].CGPath;
// the most important change
myShadowView.layer.shouldRasterize = YES;
myShadowView.layer.rasterizationScale = [UIScreen mainScreen].scale;
パフォーマンスには非常に満足しています。スクロールは赤ちゃんの肌のようにスムーズですが、このshouldRasterize
プロパティには欠点があります。下にスクロールすると、セルがビットマップをロードするのに少し時間がかかります。それらのセルを事前にレンダリングする方法はありますか? 再利用識別子のないテーブルは問題を解決しますか?
影は絶対に必要ですが、影のためにパフォーマンスを犠牲にするつもりはありません。誰かが助けてくれることを願っています。