UItableViewPullカードの理由
1738 ワード
(1)
テスト済み:パフォーマンスに大きな影響
self.imageView.clipsToBounds = YES;
テスト方法:
UItableViewCellのimageViewを直接修正すると、修正前後でインタフェースが大きく異なります
(2)cellを直接描画して問題を引き起こす
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[selfconfigCell:(detailListViewTabelCell *)cellIndexPath:indexPath ];
[cellsetNeedsDisplay];//直接描画する場合は、各CELL表示時にリフレッシュする必要があります.これは、インタフェースが遅い原因です.
}
tableViewのパフォーマンスの最適化:
(1)不透明ビューを使用する.不透明なビューは、レンダリングの速度を大幅に向上させることができます.したがって、必要でない場合は、table cellとそのサブビューのopaqueプロパティをYES(デフォルト)に設定できます.特例には背景色が含まれており、alpha値は1(例えばclearColorを使用しない)であるべきである.画像のalpha値も1にするか、図面を描くときに不透明にする.
(2)ビュー数を減らす
UItableView CellにはtextLabel、detailTextLabel、imageViewなどのviewが含まれていますが、contentViewにビューをカスタマイズすることもできます.しかしviewは大きなオブジェクトであり、作成すると多くのリソースが消費され、レンダリングのパフォーマンスにも影響します.table cellに画像が含まれており、数が多い場合は、デフォルトのUItableViewCellを使用するとパフォーマンスに非常に影響します.不思議なことに、定義済みのviewではなく、カスタムviewを使用すると、明らかに速くなります.
最も簡単な方法はcellです.selectionStyle = UITableViewCellSelectionStyleNone;, これでハイライトされません.また、CALayerを作成し、内容をlayerに描画し、cellのcontentViewを作成することもできます.layerはaddSublayer:メソッドを呼び出します.Layerはパフォーマンスに顕著な影響はありませんが、layerが透明であるか、フィレット、変形などの効果がある場合は、描画速度に影響します.
(3)余分な描画作業をしない.drawRect:を実装する場合、rectパラメータは描画する必要がある領域であり、この領域以外は描画する必要はありません.たとえば、前述の例では、イメージおよびtextを描画する必要があるかどうかをCGRectIntersectsRect、CGRectIntersection、またはCGRectContainsRectで判断し、描画方法を呼び出すことができます.
(4)プリレンダリング画像
bitmap contextで一度描き、UIImageオブジェクトに書き出してから画面に描画します.このステップは重要です!参照<プリレンダリングによるiOSデバイスの画像表示の高速化>
(5)メインスレッドをブロックしない
新しいスレッドを作成してリソースをダウンロード
テスト済み:パフォーマンスに大きな影響
self.imageView.clipsToBounds = YES;
テスト方法:
UItableViewCellのimageViewを直接修正すると、修正前後でインタフェースが大きく異なります
(2)cellを直接描画して問題を引き起こす
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[selfconfigCell:(detailListViewTabelCell *)cellIndexPath:indexPath ];
[cellsetNeedsDisplay];//直接描画する場合は、各CELL表示時にリフレッシュする必要があります.これは、インタフェースが遅い原因です.
}
tableViewのパフォーマンスの最適化:
(1)不透明ビューを使用する.不透明なビューは、レンダリングの速度を大幅に向上させることができます.したがって、必要でない場合は、table cellとそのサブビューのopaqueプロパティをYES(デフォルト)に設定できます.特例には背景色が含まれており、alpha値は1(例えばclearColorを使用しない)であるべきである.画像のalpha値も1にするか、図面を描くときに不透明にする.
(2)ビュー数を減らす
UItableView CellにはtextLabel、detailTextLabel、imageViewなどのviewが含まれていますが、contentViewにビューをカスタマイズすることもできます.しかしviewは大きなオブジェクトであり、作成すると多くのリソースが消費され、レンダリングのパフォーマンスにも影響します.table cellに画像が含まれており、数が多い場合は、デフォルトのUItableViewCellを使用するとパフォーマンスに非常に影響します.不思議なことに、定義済みのviewではなく、カスタムviewを使用すると、明らかに速くなります.
。 , UITableViewCell, drawRect: :
ですが、そうすると、行を選択すると、このcellが青くなり、その内容がブロックされていることに気づきます.最も簡単な方法はcellです.selectionStyle = UITableViewCellSelectionStyleNone;, これでハイライトされません.また、CALayerを作成し、内容をlayerに描画し、cellのcontentViewを作成することもできます.layerはaddSublayer:メソッドを呼び出します.Layerはパフォーマンスに顕著な影響はありませんが、layerが透明であるか、フィレット、変形などの効果がある場合は、描画速度に影響します.
(3)余分な描画作業をしない.drawRect:を実装する場合、rectパラメータは描画する必要がある領域であり、この領域以外は描画する必要はありません.たとえば、前述の例では、イメージおよびtextを描画する必要があるかどうかをCGRectIntersectsRect、CGRectIntersection、またはCGRectContainsRectで判断し、描画方法を呼び出すことができます.
(4)プリレンダリング画像
bitmap contextで一度描き、UIImageオブジェクトに書き出してから画面に描画します.このステップは重要です!参照<プリレンダリングによるiOSデバイスの画像表示の高速化>
(5)メインスレッドをブロックしない
新しいスレッドを作成してリソースをダウンロード