5

だから私は影を持つ UIView を持っています:

[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)];
[containerFrame.layer setShadowRadius:4.0];
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor];
[containerFrame.layer setShadowOpacity:0.4];

これを使用すると、スクロール FPS が 20 ~ 30 に低下します。影を取り除いてブームを起こすと、私の FPS は 60 に戻り、スクロールはバターのようにスムーズです。問題は、このボックス/コンテナー ビューの周りに影の効果を持たせる必要があるということです。スクロールを遅くせずにこれを達成するにはどうすればよいですか?

4

2 に答える 2

16

シャドウパスを設定してみてください。

[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)];
[containerFrame.layer setShadowRadius:4.0];
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor];
[containerFrame.layer setShadowOpacity:0.4];

// New line
[containerFrame.layer setShadowPath:[UIBezierPath bezierPathWithRect:containerFrame.bounds].CGPath];

このビューをアニメーション化する必要がある場合(特に、UITableViewCellの一部である場合)、アニメーションの途切れに気付くでしょう。これは、ビューのドロップシャドウを計算するには、Core Animationがオフスクリーンレンダリングパスを実行して、ドロップシャドウをレンダリングする方法を理解するために、ビューの正確な形状を決定する必要があるためです。(ビューは複雑な形状である可能性があり、穴が開いている可能性があることを忘れないでください。)

fromshadowPathを設定することの重要性について

于 2012-07-31T04:58:37.540 に答える
1

セットcontainerFrame.layer.shouldRasterize = YES;速度が低下する理由は、シャドウの計算にコストがかかるためです。ラスタライズすると、ビューが画像に折りたたまれるので、はるかに高速になります。

于 2012-07-31T04:59:57.800 に答える