9

UIScrollView といくつかのオブジェクト (UIView コンポジション) があり、その中に UIImageViews があります。一部の UIImageViews には丸い境界線があります (これに使用myImageView.layer.masksToBounds = YES;します)。その他には、長方形の境界線とその中に画像の一部があります (これにClip subviewsは Interface Builder のプロパティを使用します)。

問題は、クリップのプロパティがスクロール中のパフォーマンスに大きく影響することがわかったことです。

プロファイリングの iPod touch (第 4 世代) の結果:

  • 有効なクリップ プロパティ (両方またはいずれか) を使用すると、スクロール中に約 30 fps になります
  • クリップ プロパティを無効にすると、スクロール中にすべて 60 fps になります

一部の画像を丸い境界にクリップし、他の画像を長方形の境界にクリップする必要があります(画像の一部を表示するため)。では、私の質問は次のとおりです。パフォーマンスを向上させるにはどのような方法がありますか? それを行うための低レベルの方法(drawRect:または何か)があるかもしれませんか、それともアルファマスキングをいじるのに役立つかもしれませんか、それとも私は何か間違ったことをしているのですか?

4

1 に答える 1

30

グラフィックを多用するマスクやものがある場合、パフォーマンスを (多くの場合劇的に) 改善するためのシンプルで簡単な方法は、そのアイテムのレイヤーにを設定shouldRasterizeすることです。YES

#import <QuartzCore/QuartzCore.h>

// ...

view.layer.shouldRasterize = YES;

これにより、ビューがバッファーにラスタサイズ化されるため、常に再レンダリングされるわけではありません。これはビューごとに余分なメモリを消費するため、テーブルビューと同様に、スクロールするときにビューをリサイクル/再利用するようにしてください。

Retina ディスプレイで正しく動作させるには、 に適切な値を設定する必要もありますrasterizationScale

view.layer.rasterizationScale = view.window.screen.scale; // or [UIScreen mainScreen]

各アイテムの角や影が丸くなっている写真ギャラリーのスクロールなどで、これで大成功を収めました。

于 2012-06-15T10:56:40.677 に答える