0

CALayers を使用して個々のカードを引くカード ゲームがいくつかあります。画面には 40 個または 50 個のそれらが簡単に表示されますが、通常は問題なく動作します。

私は最近、CALayers の単純なプロパティを使用して影をオンにしようとしました。

theCardLayer.shadowOffset = CGSizeMake(3,2);
theCardLayer.shadowOpacity = 0.7f;

その時点で、プログラムは非常に遅くなり始めました。けっこうだ; 一部のドキュメントでは、シャドウが CPU を集中的に使用する可能性があると述べています。

すべてのものに効率的に影を描く方法についてのアイデアはありますか? それらはすべて同じUIViewの同じCALayer上にあるので、レイヤーまたはそのUIViewのマスクを引っ張ってそれを影にする方法があるかどうか疑問に思っています...

iOS5 までの機能は公正なゲームです。

4

2 に答える 2

3

少なくとも、レイヤーのshadowPathプロパティを設定してみてください。影のレンダリングを大幅に高速化できます。

于 2012-09-29T06:34:08.740 に答える
0

カートは正しい解決策を提示しました。以下は、shadowPath の使用方法の例です。

UIBezierPath *thisCLPath = [UIBezierPath 
                            bezierPathWithRoundedRect:theCardLayer.bounds 
                            cornerRadius:10.0f];
theCardLayer.shadowPath = thisCLPath.CGPath;

明らかに、ここでは丸みを帯びた角を使用しています。まっすぐなエッジのレイヤーの場合は、bezierPathWithRect:. UIBezierPath には他にも役立つメソッドがいくつかあります。

その結果、旧式の iOS デバイス (iPhone4 や中期世代の iPod Touch など) ではラグが発生し、iPad3 では燃えるような動作になります。

于 2012-10-01T22:57:27.467 に答える