0

多くのUIView(おそらく多すぎる)をアニメーション化するUIScrollViewがあります。また、これらのUIViewは「ページ」を表し、複数のページが互いに積み重ねられて、ページの「山」になることがあります(特定のビューにサブビューを追加して設定)。

過剰な数のUIViewをスクロールするとパフォーマンスが低下する可能性があることは知っていますが、パフォーマンスを向上させるための一般的なヒントがあるかどうか疑問に思っていました。

今のところ、drawRectで手動で描画することは、さまざまな「ページパイル」アニメーションを台無しにするため、私が検討したいことではありません。最後の手段として心に留めておきますが、なるべく避けたいと思います。

更新:パフォーマンスへの影響の原因が特定され、2つあります。すべてのUIViewでアンチエイリアスとシャドウを使用しています。両方をオフに切り替えると、パフォーマンスの問題が解決されます。しかし、私は明らかにそれらをオフに切り替えたくありません:)

私は次のようにシャドウを作成しています:

self.imageView.layer.opaque = YES;
        self.imageView.layer.masksToBounds = NO;
        self.imageView.layer.shadowOffset = CGSizeMake(-4, 0);
        self.imageView.layer.shadowRadius = 2.5;
        self.imageView.layer.shadowOpacity = 0.15;
        self.imageView.layer.shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(
                                                                                      self.bounds.origin.x,
                                                                                      self.bounds.origin.y,
                                                                                      self.bounds.size.width + 8,
                                                                                      self.bounds.size.height + 2)].CGPath;

パフォーマンスを向上させるためのヒントはありますか?

アンチエイリアシングに関しては、ほとんど必要です。問題は、これらの「オフセットページ」がわずかに回転していて、私のページの境界が1ピクセルであるということです。アンチエイリアシングなしで1ピクセルの境界線でわずかに回転すると、ひどく見えます。「エッジアンチエイリアスを使用したレンダリング」を「はい」に設定して、.plistでアンチエイリアスを有効にしているだけです。

シャドウ/アンチエイリアスのパフォーマンスを改善する方法についての提案をいただければ幸いです。

4

1 に答える 1

2

「たくさん」あるUIViewはいくつありますか?そして、私たちはどのような見解について話しているのですか?100個のUIViewは、複雑な描画を必要としない場合、通常は問題になりません。ただし、UIWebViewPDFをレンダリングする10個のインスタンスは別の話です...

ビューが必要な場合にのみレイアウトおよび描画されるようにしてください(=実際に表示されている場合のみ)。layoutSubviewsこれを確認するには、たとえば、ビューにブレークポイントを作成します。

UIViewまた、可能な限り不透明な要素を使用してください。これにより、不透明な要素の下のビューを描画する必要がなくなるため、描画がより効率的になります。

多くの処理を必要とするがほとんど変更されないカスタムCALayerインスタンス(CAShapeLayerシャドウなど)がある場合は、それらでラスタライズを有効にすることを検討することをお勧めします。yourLayer.shouldRasterize = YES; これにより、レンダリングされた合成画像をキャッシュすることで描画が高速化されます。

于 2012-10-15T15:26:35.037 に答える