9

Facebookを模倣した以下のメニュースタイルのレイアウトがあります。以下のように左側にドロップシャドウを配置したいのですが、レイヤーシャドウで使用しているコードはアプリケーションをLAGGYにします。私は良い代替解決策を見つけることができませんでした。アプリケーションのパフォーマンスに影響を与えないドロップシャドウを作成するための代替手段はありますか?

[self.navController.view.layer setShadowOffset:CGSizeMake(0, 1)];
[self.navController.view.layer setShadowColor:[[UIColor darkGrayColor] CGColor]];
[self.navController.view.layer setShadowRadius:8.0];
[self.navController.view.layer setShadowOpacity:0.8];

上記のコードは、私が現在使用しているコードであり、アプリケーションのパフォーマンスの問題を引き起こします。

以下の画像は、上記のコードを使用せずに実現したいものです。

ここに画像の説明を入力してください

4

3 に答える 3

11

シャドウパスを指定すると役立つはずです。

CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:self.navController.view.layer.bounds].CGPath;
[self.navController.view.layer setShadowPath:shadowPath]

CALayerのドキュメントによると、「明示的なパスを指定すると、通常、レンダリングのパフォーマンスが向上します。」

于 2012-02-17T22:24:50.403 に答える
4

ビューの境界を挿入して、シャドウ パスを設定するだけです。

UIEdgeInsets contentInsets = UIEdgeInsetsMake(10, 0, 0, 0);
CGRect shadowPathExcludingTop = UIEdgeInsetsInsetRect(self.bounds, contentInsets);
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPathExcludingTop].CGPath;
于 2014-04-17T10:02:59.150 に答える
0

私自身は、UIViewそのシャドウを含むものをサブビューとして追加し、右側のビューがアニメーション化されたらすぐに再配置します。(たとえば、レイヤーまたはコアグラフィックスでその影を描きます)

于 2012-02-17T23:12:52.480 に答える