今私は以下を持っています:
- (void)drawRect
{
// some drawing
[bgImage drawinRect:self.bounds];
// some drawing
}
私は40以上のビューを持っており、その中にテキストといくつかのマークがあります。ユーザーがタップするときにこれらすべてのビューを再描画する必要があります-それは本当に速いはずです!
コードをインストルメントして見たところ、すべての実行時間の75%が呼び出し[MyView drawRect:]
であり、drawRect時間の95%が[bgImage drawinRect:self.bounds]
呼び出しです。GPUまたはCPU内で背景を描画する必要があります。どうしてそれは可能ですか?
私が試したこと:
- drawRectの代わりにサブビューを使用します。私の場合、色のブレンドがうまくいかないため、非常に遅くなります。
- UIImageViewを背景として追加しても効果はありません。サブビューを描画することはできません...
- CALayerに画像レイヤーを追加しますか?出来ますか?
アップデート:
今私はdrawInRectの代わりにCALayerを使おうとしています。
- (void)drawRect
{
// some drawing
CALayer * layer = [CALayer layer];
layer.frame = self.bounds;
layer.contents = (id)image.CGImage;
layer.contentsScale = [UIScreen mainScreen].scale;
layer.contentsCenter = CGRectMake(capInsects.left / image.size.width,
capInsects.top / image.size.height,
(image.size.width - capInsects.left - capInsects.right) / image.size.width,
(image.size.height - capInsects.top - capInsects.bottom) / image.size.height);
// some drawing
}
現在、この新しいレイヤーの代わりに何も表示されていません。私の絵はすべてこのレイヤーの下にあると思います...