我可以在第一次使用注释完美载入我的地图视图。但是,如果我尝试重新加载按钮上的地图(已经加载后),用户必须等到该过程完成。 这个问题的产生是因为重新加载时,新的注释不会出现,直到mapview被显着移动,这就是当触发viewForAnnotation时。我见过两个类似于我的解决方案,其中涉及'performSelectorInBackground'&'performSelectorOnMainThread'。前者没有为我工作:(&后者我不想这样做(虽然它是唯一的选项),因为我希望用户能够与地图交互,而注解加载而不会阻塞主线程。 m意识到这样的动画最好在主线程中完成,所以问题1.是否没有其他方法可以做,而不是让用户等待地图重新加载?2.有关最佳方式的建议? 在此先感谢。在不阻挡主线程的情况下添加/重新加载mapview注释
4
A
回答
4
您可以使用调度队列块来实现这一 这里是语法
您可以在私人队列创建你喜欢这个
dispatch_queue_t queue = dispatch_queue_create("com.MyApp.AppTask",NULL);
dispatch_queue_t main = dispatch_get_main_queue();
dispatch_async(queue,
^{
//do the fetching of data here(Don't do any UI Updates)
dispatch_async(main,
^{
// Do the UI Update here.
});
});
苹果已经将此称为递归分解。
在该位的代码计算被卸载到一个后台线程与dispatch_async()
和
然后dispatch_async()
回主队列将安排我们的块与我们在后台线程计算的最新数据运行。
相关问题
- 1. 如何在不阻挡UI的情况下向WPF程序添加延迟
- 2. 在不阻挡用户界面的情况下在循环中添加延迟
- 3. 不要在viewdidload中加载mapview后重新添加mapview
- 4. 在不重新启动Xorg的情况下重新加载XINITRC
- 5. MapView加载后从XML加载注释
- 6. 如何在不杀死主进程的情况下重新加载独角兽?
- 7. 如何在不重新加载页面的情况下添加元素
- 8. 在不使用xml注释的情况下在春季添加用于@Scheduled注释的调度程序
- 9. 在不重新加载页面的情况下请求内容
- 10. 在不重新加载页面的情况下更改URL
- 11. 如何在不重新加载的情况下将其返回主页
- 12. Zend Framework在不重新加载布局模板的情况下加载视图
- 13. 如何在不重新加载当前页面的情况下加载URL?
- 14. 如何在无需重新加载的情况下将参数添加到URL
- 15. 在不阻塞主线程的情况下从python线程返回值
- 16. file_get_contents在不加载的情况下添加备份路径
- 17. 在运行时App.Config添加ConnectionString并在不重新加载应用程序的情况下显示?
- 18. 在未完成的情况下重新加载一个活动()
- 19. 在这种情况下,“重新加载”是做什么的?
- 20. 在不改变路线的情况下从动作函数中加载/重新加载数据
- 21. 如何在没有页面加载图标的情况下重新加载iFrame?
- 22. 在mkmapview中添加注释,并将mapview设置为新添加注释的区域
- 23. 在不重新加载页面的情况下重置流星的lastSessionI
- 24. 在不重新加载的情况下更新UITableView中的页脚标题
- 25. 如何在不重新加载网页的情况下重新加载Ajax调用参数
- 26. 如何在不重新加载整个页面的情况下重新加载div?
- 27. 如何在不提供URL的情况下重新加载负载()
- 28. 如何在不重置篡改密码的情况下重新加载页面?
- 29. 如何在不重新加载整个列表的情况下将新行添加到android列表视图?
- 30. 如何在不刷新页面的情况下重新加载Datatable?
我有点短时间来尝试这个,所以我最终在后台线程中获取数据并在主线程中显示注释。派遣队列可能类似的方法。因此将其标记为解决方案。 – akdsouza 2012-02-09 11:23:05
不幸的是,这并不能解决同时添加/删除100个注释的问题。正如你所说,所有的UI操作都必须在主线程中。解决这个问题的办法是一次性限制屏幕上的引脚数量,或者通过集群或其他方式(显示距离屏幕中心最近的前50)。 – Sean 2012-10-09 04:48:25
也看不到需要一个单独的队列,只需使用dispatch_get_global_queue – aryaxt 2014-06-09 00:22:58