【问题标题】:UIActivityIndicator not working properly?UIActivityIndi​​cator 不能正常工作?
【发布时间】:2010-05-27 09:22:57
【问题描述】:

我有一个关于 UIActivityIndi​​cator 的问题。我在按钮上的 IBAction 上应用了[spinner startAnimating],然后进行了一些处理。进程后activityindicator应该停止然后导航到另一个视图。但是没有出现活动指示器。当我删除“[spinner stopAnimating]”行时,指示器会出现,但不会在按下按钮的瞬间出现。它出现在其他视图加载之前,显然没有出现,我的意思是它没有出现,但如果我们仔细观察,它只会出现一瞬间。

感谢任何答案。

【问题讨论】:

    标签: iphone objective-c ios uiactivityindicatorview


    【解决方案1】:

    Ole 非常正确,但有一个技巧是您不介意同步处理(通常这就是您想要首先显示活动指示器的原因)。

    首先移动您要处理的代码,同时微调器由它自己的方法决定。然后做

    [spinner startAnimating];
    [self performSelector:@selector(methodname) withObject:nil afterDelay:0];
    

    afterDelay:0 表示下一次通过运行循环。这样,微调器就开始了。

    【讨论】:

    • 哦,Ole 也是对的,他建议您应该回顾之前的问题并接受(单击对勾)正确的问题!
    • 其实我的代码是这样的:-(IBAction)buttonPressed:(id)sender { [spinner startAnimating]; if(condition) { [self presentModalViewController:aView Animation:yes]; [微调停止动画]; } }
    • 所以将你的 if、self present 和 spinner stop 移动到一个方法并用 performSelector:WithObject:afterDelay:0 调用它
    • 很好的答案!我也遇到了同样的问题,你帮我省了很多工作!
    • 我一直在尝试这样做很长时间,以至于我几乎失去了对有解决方案的信念。谢谢你们,这是救命的。
    【解决方案2】:

    在您的代码将控制权返回给运行循环之前,动画不会开始。如果您的处理任务阻塞了主线程,则在完成之前不会进行任何 UI 更新。您应该异步进行处理(例如,通过启动 NSOperation)。

    【讨论】:

      【解决方案3】:

      你应该在执行选择器中运行。

      例如:

      [self performSelector:@selector(animation) withObject:nil afterDelay:0]
      
      -(void)animation
      
      {
      
      NSAutoreleasepool *pool = [[NSAutorepleasepool alloc]init];
      
      [indicatorView startAnimating];
      
      [pool release];
      
      }
      

      【讨论】:

        【解决方案4】:

        这是一个老问题。我留下我的答案here,这样可能会帮助某人解决他们的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多