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 アプリでは、アートを含むアルバムのリストがシルクのようにスクロールするので、明らかに何かが欠けています。