gpt4 book ai didi

ios - UIActivityIndi​​catorView 未呈现

转载 作者:行者123 更新时间:2023-11-29 10:53:51 25 4
gpt4 key购买 nike

我有一个应用程序可以调用网络服务来获取数据。我想添加一个事件指示器,该指示器在应用程序获取 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 - UIActivityIndi​​catorView 未呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com