Pis*_*ean 13 cocoa-touch objective-c uiactivityindicatorview ios
我正在使用一个在线解析Feed的应用程序.当我单击刷新按钮时,需要一些时间来重新解析文件并显示其数据.当我点击刷新按钮时,我想在视图中间有一个活动指示器.并且在完成解析时该指示符应该隐藏.我正在使用此代码,但它不起作用.
- (IBAction)refreshFeed:(id)sender
{
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[self.view addSubview:spinner];
[spinner startAnimating];
// parsing code code
[spinner release];
}
Run Code Online (Sandbox Code Playgroud)
Wal*_*ter 17
通常需要将UIActivityIndicator置于与长进程(解析订阅源)不同的线程中以便显示.
如果要将所有内容保存在同一个线程中,则需要指示时间显示.此Stackoverflow问题解决了代码中的延迟问题.
编辑:两年后,我认为,任何时候你使用延迟来发生一些事情,你可能做错了.以下是我现在要执行此任务的方法:
- (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];
});
});
}
Run Code Online (Sandbox Code Playgroud)
Sor*_*ohi 12
我想我无法解释它.我们再试一次.它是一个基于导航的应用.我有tableView.每个单元格都会创建一个detailView.在RootView上,这是一个tableview,有一个刷新按钮.当我点击该按钮时,它再次解析Feed.这需要一些时间.因为那个时候节目没有回应.并且解析完成后再次工作.现在我需要那个时间的活动指标.我不知道如何添加xib.bcz当我打开main.xib并在RootViewController中放置活动指示器.它来自整个tableView的前面.现在可能我解释得很好.如果没有让我知道我会再试一次.
从上面的内容来看,程序在解析过程中没有响应,这是一个问题.如果在解析数据时GUI冻结,则应将该操作移动到辅助线程.这样,您的GUI仍然保持响应,您将能够看到活动指示器.
在主线程上你应该有类似的东西,以显示活动指标:
UIActivityIndicatorView *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
av.frame = CGRectMake(round((yourView.frame.size.width - 25) / 2), round((yourView.frame.size.height - 25) / 2), 25, 25);
av.tag = 1;
[yourView addSubview:av];
[av startAnimating];
Run Code Online (Sandbox Code Playgroud)
在辅助线程完成之后,这是解析数据的线程,你应该在主线程上调用类似这样的东西来删除活动指示符:
UIActivityIndicatorView *tmpimg = (UIActivityIndicatorView *)[yourView viewWithTag:1];
[tmpimg removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.alpha = 1.0;
[collectionVwSearch addSubview:activityIndicator];
activityIndicator.center = CGPointMake([[UIScreen mainScreen]bounds].size.width/2, [[UIScreen mainScreen]bounds].size.height/2);
[activityIndicator startAnimating];//to start animating
Run Code Online (Sandbox Code Playgroud)
对于斯威夫特
let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView.init(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
activityIndicator.alpha = 1.0
collectionVwSearch.addSubview(activityIndicator)
activityIndicator.center = CGPointMake(UIScreen.mainScreen().bounds.size.width / 2, UIScreen.mainScreen().bounds.size.height / 2)
activityIndicator.startAnimating()
Run Code Online (Sandbox Code Playgroud)
[activityIndicator stopAnimating]在适当的地方停止activityIndicator wirte