UIActivityIndicatorView反应迟钝
当UIButton
被触发,一个UIActivityIndicator
开始,然后当implementLogin
结束停止:UIActivityIndicatorView反应迟钝
-(IBAction)loginButton {
NSLog(@"loginButton triggered");
// Checks the Fields are not empty
if ([sessionIdField.text length] != 0 && [usernameField.text length] != 0) {
NSLog(@"Beginning Spinner");
// Displays spinner
[activitySpinner startAnimating];
[self implementLogin];
// Displays spinner
[activitySpinner stopAnimating];
}
}
但是在运行时,微调不会出现!我已经设置了微调器'停止时隐藏'。
当我设置活动指示器在视图加载之前设置为动画时,它看起来应该是这样,所以我猜测它与UIButton
有问题...(另外,我正在使用'Touch Up Inside' )
这是一个简单的问题......任何人都可以帮忙吗?
感谢
无论implementLogin
做(做一个网络请求,也许?),它做它的主线程,这可能阻止像飞旋动画UI更新上。
你可以重新编写类似这样:[代码是未经测试,但你的想法]
[activitySpinner startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_PRIORITY_DEFAULT, 0), ^{
[self implementLogin];
dispatch_async(dispatch_get_main_queue(), ^{
// Stops spinner
[activitySpinner stopAnimating];
}
}
这里发生的事情是,你是派遣登陆任务的背景下,这个块最后要做的就是停止主线程上的微调(作为一个单独的任务)。
玩过一些multiThread方法后,我解决了这个问题: '[NSThread detachNewThreadSelector:@selector(changeSpinner :) toTarget:self withObject:@“TRUE”];'谢谢! – 2012-02-27 13:07:39
没有更多的代码,我们只能猜测为什么它不工作的原因。
我认为正确的“开始微调”输出(?)
如果是这样,你可能没有正确初始化UIActivityIndicatorView
。 它看起来像这样吗?
activitySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activitySpinner.hidesWhenStopped = YES;
[view addSubview:activitySpinner];
我已经使用了界面生成器(我相信)为我初始化UIActivityIndicatorView。是的,它隐藏了,而且它已经隐藏了。实现LoginLog处理一些API调用,然后返回。 – 2012-02-21 21:38:58
你检查'隐藏'吗?那么这是至关重要的一点。如果“隐藏”属性设置为“是”(TRUE),即使启动了动画,它也不会显示。 – fscheidl 2012-02-21 21:53:06
'implementsLogin'是否同步? – Costique 2012-02-21 20:19:56
是的工具登录是同步的。 – 2012-02-21 21:37:01