gpt4 book ai didi

ios - 更快地绘制叠加层中的 map 图 block

转载 作者:行者123 更新时间:2023-11-28 22:28:04 25 4
gpt4 key购买 nike

我正在尝试加快我的应用程序中 map 图 block 的绘制速度,因为 Time Profiler 显示这是应用程序运行速度最慢的地方。项目文件是 here ,Time Profiler 说最慢的部分是图 block 覆盖的 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 无论如何都不会在后台线程中发生,因为它不会在每次应用程序加载图 block 时停止 map 滚动)

最佳答案

是的,drawMapRect 已经在多个线程上运行,直接从后台线程调用任何绘图代码是不好的做法,不会提高速度或响应能力。您代码中的瓶颈很可能是绘图函数 CGContextDrawImage,如果您已经确定您只绘制与传入 drawMapRect 的 mapRect 相交的图 block ,那么您可能无能为力: 。但是,您正在从多个线程重复调用 UIImage 的方法 imageWithContentsOfFile,我不认为这会像 imageNamed: 方法那样缓存图像数据做。解决此问题后,您可能会看到速度有所提高。然而,根据我的经验,如果探查器告诉您它大部分时间都花在 drawMapRect: 方法上,您不必 panic 。由于它在主线程之外被调用并且 map 仍然响应用户交互,因此优化它通常不会极大地改善用户体验。

关于ios - 更快地绘制叠加层中的 map 图 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com