0

MPMediaQuery からアルバムのリストをロードしている UITableView があります。正方形ではないアルバム アートを含むアルバムが、組み込みのセル ビューのラベル テキストを右に押し出していることに気付くまで、すべてが正常に機能していました。プロセス中にスクロールがスムーズではないことに気付いたので、これに気付いたのは私の失敗でした.

ペン先からセルを作ってみたところ、位置決めの問題は解決しましたが、パフォーマンスは依然として低下していました。この時点で、私は膨大な量の調査を開始し、実行できるようにあらゆることを試みました。

  • 最初は、イメージビューと 2 つのラベルを持つ nib のセルでした
  • imageview の奇妙なスケーリングを修正するために、uiview 内に imageview を追加してトリミングしました (実際のパフォーマンスへの影響はありません)。
  • 後処理なしで画像をロードしましたが、まだ不安定なパフォーマンスです。
  • -(void)drawRect でセルを実装し (Apple の TableViewSuite の例 #5 の例のように)、テーブルビューから画像を渡します。これは、最初の ~8 枚の画像のみをロードするだけで、パフォーマンスはわずかに低下しました。
  • 次に、[myCell setNeedsDisplay] を設定してセルを再描画し、他のすべての画像が正しく表示されるようにすると、パフォーマンスが低下しました。こちらも画像のある部分だけをそのまま描き直してみました。
  • 静止画像が 1 つだけのこの方法では、完璧なパフォーマンスが得られました。

cellIdentifier などの通常のものがすべて正しいことを確認しました。セル ビューにテキストしかない場合は、完全にスクロールします。

以下は、セルの画像を現在どのように取得しているかを示すために、デフォルトのセル ビューの 1 つを使用した tableviewcell の実装です。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Cell initizalation
static NSString *CellIdent = @"CellIdent";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdent];
if (cell == nil) {
    cell = [[UITableViewCell alloc]
            initWithStyle:UITableViewCellStyleSubtitle
            reuseIdentifier:CellIdent];
}

cell.imageView.image = [[[[albumList
                       objectAtIndex:indexPath.section]objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyArtwork]imageWithSize:CGSizeMake(0,56)];
//it seems to scale with a sharper image if CGSizeMake has a value, rather than 
//CGSizeZero. It doesn't actually do any scaling at this point, which I initially thought
//it would, but the results were more what I wanted so...

return cell;


}

Apple の iPod アプリでは、アートを含むアルバムのリストがシルクのようにスクロールするので、明らかに何かが欠けています。

4

1 に答える 1

0

この答えは役立ちます:

iPhone UITableView のスクロール パフォーマンスを改善するための秘訣は?

特にステップ 3 を見てください。

UITableViewCell の drawRect ですべてを描画します: 可能であれば、サブビューは絶対に避けてください (または、標準のアクセシビリティ機能が必要な場合は、コンテンツ ビューの drawRect:)

例 :

- (void)drawRect:(CGRect)rect {
   [yourImage drawAtPoint:CGPointMake(0,0)];
}

画像を自分で描画した場合のパフォーマンスの向上を示す Apple のサンプル アプリを見つけることができます。

https://developer.apple.com/library/ios/#samplecode/AdvancedTableViewCells/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009111

完全で明確な説明が必要な場合は、UITableViewPerformance を詳細にカバーするこの WWDC セッションをご覧ください。

https://developer.apple.com/videos/wwdc/2010/?id=128

于 2012-03-12T20:39:33.923 に答える