2012-02-21 84 views
2

UIButton被触发,一个UIActivityIndicator开始,然后当implementLogin结束停止:UIActivityIndi​​catorView反应迟钝

-(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' )

这是一个简单的问题......任何人都可以帮忙吗?

感谢

+0

'implementsLogin'是否同步? – Costique 2012-02-21 20:19:56

+0

是的工具登录是同步的。 – 2012-02-21 21:37:01

回答

2

无论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]; 
    } 
} 

这里发生的事情是,你是派遣登陆任务的背景下,这个块最后要做的就是停止主线程上的微调(作为一个单独的任务)。

+0

玩过一些multiThread方法后,我解决了这个问题: '[NSThread detachNewThreadSelector:@selector(changeSpinner :) toTarget:self withObject:@“TRUE”];'谢谢! – 2012-02-27 13:07:39

0

没有更多的代码,我们只能猜测为什么它不工作的原因。

我认为正确的“开始微调”输出(?)

如果是这样,你可能没有正确初始化UIActivityIndicatorView。 它看起来像这样吗?

activitySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
activitySpinner.hidesWhenStopped = YES; 
[view addSubview:activitySpinner]; 
+0

我已经使用了界面生成器(我相信)为我初始化UIActivityIndi​​catorView。是的,它隐藏了,而且它已经隐藏了。实现LoginLog处理一些API调用,然后返回。 – 2012-02-21 21:38:58

+0

你检查'隐藏'吗?那么这是至关重要的一点。如果“隐藏”属性设置为“是”(TRUE),即使启动了动画,它也不会显示。 – fscheidl 2012-02-21 21:53:06