我正在使用一个可在线解析提要的应用程序。当我单击刷新按钮时,需要一些时间来重新分析文件并显示其数据。单击刷新按钮时,我希望 View 中间有一个 Activity 指示器。解析完成后,该指示符应该隐藏起来。
我正在使用此代码,但无法正常工作:

- (IBAction)refreshFeed:(id)sender
{
   UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
   [self.view addSubview:spinner];

   [spinner startAnimating];

   // parsing code code

   [spinner release];
}

最佳答案

通常,需要将UIActivityIndi​​cator放入与长进程(解析提要)分开的单独线程中,以便出现。

如果要将所有内容都保留在同一线程中,则需要给指示符时间显示。 This Stackoverflow question解决了在代码中放置延迟的问题。

编辑:两年后,我认为任何时候您使用延误使某件事发生时,您都可能做错了。这是我现在要执行的任务:

- (IBAction)refreshFeed:(id)sender {
    //main thread
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [self.view addSubview:spinner];

    //switch to background thread
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

        //back to the main thread for the UI call
        dispatch_async(dispatch_get_main_queue(), ^{
            [spinner startAnimating];
        });
        // more on the background thread

        // parsing code code

        //back to the main thread for the UI call
        dispatch_async(dispatch_get_main_queue(), ^{
            [spinner stopAnimating];
        });
    });
}

关于ios - 如何以编程方式在 View 中间创建事件指示器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5103227/

10-12 01:32