1

アプリケーションにいくつかのテーブルがあり、データが取得され、テーブルが動的に更新されます。デバイスで、画面に収まらないほど多くのセルがある画面でスクロールが必要な場合、スクロール中に遅れることに気づきました。

私は最終的に問題を見つけるまで、問題を見つけるためにコードを1行ずつ調べ始めました

CachedImages *cache = [[CachedImages alloc] init];
                    UIColor *backgroundColour;
                    if([table getImage] != nil)
                    {
                        backgroundColour = [[UIColor alloc] initWithPatternImage:[cache getImageByPath:[[table getImage] getName]]];
                    }

cell.backgroundColor = [backgroundColour colorWithAlphaComponent:fOpacity];

(背景画像やデータなどのテーブル情報を格納するテーブルクラスがあります)

特にこのライン

cell.backgroundColor = [backgroundColour colorWithAlphaComponent:fOpacity];

その1行をコメントアウトすると、テーブルは完全にスクロールしますが、コメントを外すと、ラグの問題が発生します。したがって、これを回避するために、テーブルの背景色を格納するインスタンス変数を設定し、キャッシュされた画像コードをデリゲートメソッドから削除しました。これにより、テーブルが読み込まれる前に読み込まれるため、プルし続ける必要がなくなります。セルを再描画する必要があるたびにキャッシュから。

これでほとんど問題が解決しました。最初に画面にアクセスして下にスクロールすると、少し遅れますが、最初に下にスクロールした後は、パフォーマンスは良好です。この最初のラグを防ぐ方法はありますか?デリゲートメソッドからすべての重いレンダリングを移動しましたが、このイメージコードは、ユーザーが最初に画面に入るときにまだわずかなラグを引き起こしています。

これを防ぐ方法について何かアイデアはありますか?テーブルはカスタムテーブルで、私はこのように設定されています

  NSString *CellIdentifier = @"CustomCellIdentifier";
                    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
                    if (cell == nil)
                    {
                        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCellView" owner:self options:nil];
                        cell = [nib objectAtIndex:0];
                    }

だから私は識別子を再利用しています。

任意の提案をいただければ幸いです

4

1 に答える 1

0

私が思いついた最善の解決策は、画面が表示される前に画像をプリロードすることです。そのため、画像をキャッシュから取得し続ける必要はありません。これでほとんど問題が解決しました。最初に画面が読み込まれるときはわずかな遅れがありますが、その後はスムーズになります。私がこれまでに見つけた最良の解決策

于 2013-01-23T11:40:35.800 に答える