タイム プロファイラーが、アプリの実行速度が最も遅い場所を示しているため、アプリでマップ タイルの描画を高速化しようとしています。プロジェクト ファイルはここにあります。時間プロファイラーが最も遅いと言っている部分は、タイル オーバーレイの drawMapRect:zoomScale:inContext メソッドのこの部分です。
for (ImageTile *tile in tilesInRect) {
CGRect rect = [self rectForMapRect:tile.frame];
NSString *path = tile.imagePath;
if (path) {
UIImage *image = [UIImage imageWithContentsOfFile:path];
CGContextSaveGState(context);
CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));
float scale = (overZoom/zoomScale);
CGContextScaleCTM(context, scale, scale);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1, -1);
CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), [image CGImage]);
CGContextRestoreGState(context);
}
}
私は、UIImages を使用してそれらをスケーリングすることが、物事を最も遅くしていると推測しています。これを高速化する方法、または描画をバックグラウンド スレッドに移動する方法はありますか? (アプリがタイルをロードするたびにマップのスクロールを停止しないため、drawMapRect はバックグラウンド スレッドで発生しませんが)