だから私は自分のナビゲーションコントローラーでカスタムアニメーションを実行し、viewControllerをプッシュおよびポップする方法を実行しています。
すべてがスムーズに実行されます。次のコード(UINavigationController
のサブクラス)を追加するとすぐに、パフォーマンスが大幅に低下します。影を追加すると、すべてのアニメーションが非常に遅延します。これは予想されたものですか、それともコードで何か問題がありますか?
// This code gets called once during NavigationController initialization.
[self.view setClipsToBounds:NO];
[self.view.layer setCornerRadius:5];
[self.view.layer setShadowOffset:CGSizeMake(0, 20)];
[self.view.layer setShadowColor:[[UIColor yellowColor] CGColor]];
[self.view.layer setShadowRadius:20.0];
[self.view.layer setShadowOpacity:1];
編集:
シャドウの半径を1に変更したが、まだ遅い
シャドウを追加すると速度が低下するはずです。 20のshadowRadius
は非常に高く、特に遅くなります。
シャドウのレンダリング速度を向上させるもう1つのキー: shadowPath
プロパティを設定します。それは劇的に役立ちます。
self.view.layer.shouldRasterize = YES;
self.view.layer.rasterizationScale = UIScreen.mainScreen.scale;
最近、遅いCALayerシャドウでいくつかの問題がありました。その単純なコード行ですべてが修正されました!
shadowPath
の代わりにshadowOffset
を使用します。
theView.layer.shadowPath = [UIBezierPath bezierPathWithRect:theView.bounds].CGPath;
この投稿を確認してください: iphone-ビューのシャドウがオンの場合、アニメーションのパフォーマンスが非常に低下します
はい、影は非常に高価です(特に大きな影-半径を操作すると、経験する減速の度合いに大きな違いがあることに気付くでしょう)。パフォーマンスを向上させる1つの方法は、イメージをCGImageContext
に一度レンダリングして、レイヤーを再描画するたびにシャドウを再レンダリングするのではなく、そのイメージを表示することです(ただし、シャドウをアニメーション化する必要がある場合は機能しません)か何か)。