我可以在第一时间使用注解完美加载我的地​​图 View 。但是,如果我尝试在按钮单击后重新加载 map (已加载后),则用户必须等待该过程完成。
之所以出现此问题,是因为在重新加载时,新的注释只有在mapview进行大幅度移动(即viewForAnnotation触发)时才会出现。我还看到了另外两个与我类似的问题,涉及涉及“ performSelectorInBackground ”和“ performSelectorOnMainThread ”的解决方案。前者对我不起作用:(&后者我不想做(尽管这是唯一可行的选择),因为我希望用户能够在注解加载时与 map 进行交互而不会阻塞主线程。我知道这样的动画最好在主线程上完成,所以有以下问题:1.除了让用户等到 map 重新加载外,没有其他方法可以这样做吗?2.关于最佳方法的建议吗?
提前致谢。

最佳答案

您可以使用调度队列块来实现此目的
这是语法
您可以像这样在私有(private)队列上创建

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()返回主队列,这将安排我们的块与我们在后台线程中计算的更新数据一起运行。

10-06 13:26
查看更多