作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序可以调用网络服务来获取数据。我想添加一个事件指示器,该指示器在应用程序获取 Web 服务数据时可见。我查看了其他帖子,虽然我相信我正在按照帖子的建议进行操作,但我的指示器并未呈现在屏幕上。进行 Web 服务调用的对象是 stateGauges。这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
UIActivityIndicatorView *activityStatus = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(120, 230, 50, 50)];
activityStatus.center = self.view.center;
[self.view addSubview:activityStatus];
[activityStatus bringSubviewToFront:self.view];
[UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE;
[activityStatus startAnimating];
stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateIdentifier andType:nil];
[activityStatus stopAnimating];
}
有什么建议吗?谢谢! V
最佳答案
您的问题是无论您在 GuagesList 初始值设定项中做什么,您的动画启动都会被阻止。
当您告诉事件指示器开始动画时,它不会立即呈现到屏幕上,而是将 View 标记为需要在运行循环的下一轮更新。然后你的初始化器阻塞线程直到它完成,你调用 stopAnimating,然后线程有机会更新指示器。到那时它已经设置为不动画。
最好的解决方案是使用 GCD 在另一个线程上执行初始化程序。并确保在调用 stopAnimating 之前切换回前台线程。
通常的模式是做这样的事情:
[activityStatus startAnimating];
// enqueue it
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateIdentifier andType:nil];
// now switch back to main thread
dispatch_async(dispatch_get_main_queue(), ^{
[activityStatus stopAnimating];
});
});
您需要验证代码,因为我必须从 Windows 计算机上的内存中键入此代码。
关于ios - UIActivityIndicatorView 未呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320707/
我是一名优秀的程序员,十分优秀!