私のプロトタイプ アプリでは、約 100 個の CALayer が異なるが固定された位置にあり、コンテンツと同じ小さな画像があります。hidden
ここで必要なのは、プロパティを繰り返し非常に迅速に切り替えることだけです。
UIImage
これは機能しますが、のdrawAtPoint:
メソッドを使用した以前のアプローチよりも著しく遅くなりdrawRect
ます。
トランジションのない、ストロボのような外観が必要です。そのため、私はhidden
and notを使用していopacity
ますが、それでも、フェードがあるように見え、遅いことがわかります。drawAtPoint:
-アプローチでは見栄えは良かったのですが、CPU に負荷がかかりました。
このため、CALayer を使用して書き直しましたが、なぜそんなに遅いのか不思議です。
これを調べる方法を教えてください。楽器では、私は何の洞察も得られませんでした。レンダリングは 59 ~ 60 FPS であることがわかりますが、明らかにかなり遅いです。
(タッチ)イベントとレイヤーの非表示または表示の間に遅延があるようです。
それが私がレイヤーを初期化する方法です:
layers[i] = [CALayer layer];
layers[i].frame = frameForLayer(i);
layers[i].contents = (__bridge id)image;
[layers[i] setContentsScale:scale];
layers[i].hidden = YES;
[[self layer] addSublayer:layers[i]];
awakeFromNib
私のメインビューのすべて。
後で、hidden
プロパティのみが変更され、残りは残ります。
編集:
の代わりにsomeLayer.hidden = NO
、私は今書いています
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
someLayer.hidden = NO;
[CATransaction commit];