iPhone UITableViewCell 中的 MKMapView

发布于 2024-10-15 19:00:28 字数 218 浏览 2 评论 0原文

我的 UITableView 的每个单元格都必须显示一个带有注释的小型 MKMapView。 我通过创建自定义 Cell 并在 cellForRowAtIndexPath 方法中配置其 MKMapView 来设法做到这一点。这些位置基于我之前构建的数组。

一切正常,但每次滚动 UITableView 时 MKMapViews 都会刷新。 有没有办法“缓存” MKMapViews ?

谢谢

Each cell of my UITableView has to display a small MKMapView with an annotation inside.
I managed to do this by creating my custom Cell and configuring its MKMapView in the cellForRowAtIndexPath method. The locations are based on an array I build earlier.

Everything works fine but the MKMapViews refresh everytime I scroll the UITableView.
Is ther a way to "cache" the MKMapViews ?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

烟凡古楼 2024-10-22 19:00:29

您可以使用此处描述的方法缓存 MKMapView 的 UIImage:从 MKMapView 获取地图图像

您应该尽可能经常使用该 UIImage,并且仅在用户需要与其交互时才显示实际地图。为了获得最佳性能,您可以尝试始终在 tableview 中使用 UIImage,并且当用户点击该行时,加载真实地图(可能在其自己的视图控制器中)。

You could cache a UIImage of your MKMapView using the method described here: Get map image from MKMapView

You should use that UIImage as often as possible, and only display the actual map when the user needs to interact with it. For best performance, you could try always using the UIImage in the tableview and when the user taps on the row, load the real map (perhaps in its own view controller).

与之呼应 2024-10-22 19:00:29

您可能不应该在 cellForRowAtIndexPath 中配置地图视图,而是配置它们并将它们存储在 viewDidLoad 或 awakeFromNib 中的数组中。然后只需在 cellForRowAtIndexPath 中设置单元格的地图视图即可。

You probably shouldn't be configuring the map views in cellForRowAtIndexPath, instead configure them and store them in an array in viewDidLoad or awakeFromNib. Then just set the cell's map view in cellForRowAtIndexPath.

久伴你 2024-10-22 19:00:29

只需在头文件中使用 @property 创建一个 uitableview 单元格全局对象,然后将单元格分配给全局对象(如果单元格为零)。

然后每次进入cellforrowatindexpath时检查该对象是否为nil。如果不是nil,则返回全局对象。

//在class.h中

@property (nonatomic, retain) UITableViewCell *mapCell;

//在cellForRowAtIndexPath中

if (mapCell == nil) {
                        allocate the cell
                    }
                    else{
                        return mapCell;
                    }

Just create a uitableview cell global object in the header file with @property and assign the cell to the global object, if the cell is nil.

Then each time you enters the cellforrowatindexpath check whether the object is nil or not.. If not nil , return the global object .

//in class.h

@property (nonatomic, retain) UITableViewCell *mapCell;

//in cellForRowAtIndexPath

if (mapCell == nil) {
                        allocate the cell
                    }
                    else{
                        return mapCell;
                    }
天暗了我发光 2024-10-22 19:00:29

有一个更好的方法,使用 MKMapSnapshotter 从地图创建图像(在后台 - 无延迟!),手动添加图钉,然后您可以缓存图像并使其速度极快。我在这里提供了一些代码 - http://synappse.co/mkmapview-too -慢速使用预览/

There is a better way, use MKMapSnapshotter to create images from the map (in the background thead - no lag!), add the pins manually and then you can cache the images and make it blazing fast. I've provided some code here - http://synappse.co/mkmapview-too-slow-use-preview/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文