akd*_*uza 5 iphone annotations asynchronous reload mkmapview
我可以在第一次完美地加载带有注释的地图视图。但是,如果我尝试通过单击按钮重新加载地图(在它已经加载之后),用户必须等到该过程完成。出现此问题是因为在重新加载时,新的注释不会出现,直到 mapview 显着移动,即viewForAnnotation触发时。我已经看到了另外两个与我的问题类似的问题,其解决方案涉及“ performSelectorInBackground ”和“ performSelectorOnMainThread ”'。前者对我不起作用:(&后者我不想做(尽管它是唯一有效的选项),因为我希望用户能够在加载注释时与地图交互而不阻塞主线程。我我知道这样的动画最好在主线程上完成,所以问题 1. 除了让用户等待地图重新加载之外,还有没有其他方法可以做到这一点? 2. 关于最佳方法的建议?提前致谢。
您可以使用调度队列块来实现此目的,这是语法
您可以像这样创建您的私有队列
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.
});
});
Run Code Online (Sandbox Code Playgroud)
Apple 将此称为递归分解。
在这段代码中,计算被卸载到后台线程上
,然后dispatch_async()返回主队列,主队列将安排我们的块使用我们在后台线程中计算的更新数据运行。dispatch_async()
| 归档时间: |
|
| 查看次数: |
2991 次 |
| 最近记录: |