【问题标题】:activity indicator appearing only for a second活动指示器仅出现一秒钟
【发布时间】:2013-01-09 16:26:22
【问题描述】:

我有 2 个视图 1) 一个 2) 乙

当我从视图 A 切换到视图 B 时,加载需要很长时间,所以我在切换中添加了一个活动指示器。

我的问题是,当我切换到视图 B 时,我的屏幕在视图 A 中冻结(加载)并且只有一瞬间,它会在进入视图 B 之前显示活动指示器。

如何确保活动指示器在开始加载之前出现。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

[self useActivityIndicator];


if ([[segue identifier] isEqualToString:@"ShowAdsDetail"])
{
    //do anything that needs to be done



}

}

    -(void)useActivityIndicator{

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[activityView startAnimating];
subView.hidden = NO;

}

【问题讨论】:

  • 在您的prepareForSegue: 方法中发布代码。那里的顺序有时可能是个问题。
  • 感谢您的回复。我就是这样做的,我把它放在 prepareForSegue: 方法的顶部,但同样的问题出现了
  • @Naux,不,不。将该方法中的代码添加到此问题中。 :)
  • 好的,现在你的 useActivityIndi​​cator 方法怎么样。
  • 对不起,不够彻底。我将 subView 添加为覆盖视图

标签: ios uiactivityindicatorview activity-indicator


【解决方案1】:

UIActivityIndi​​cator 的动画速度过快,我也遇到过类似的问题。 segue 立即推动下一个视图控制器,几乎没有显示活动指示器。

如果这可以帮助其他人 - 我可以通过实现 performSelector:withObject:afterDelay 来修复它,然后在 removeSpinner 方法中调用我的 performSegueWithIdentifier 方法。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
    [self.spinner startAnimating];
    [self performSelector:@selector(removeSpinner:) withObject:self.spinner afterDelay:2.0];
}

- (void)removeSpinner: (UIActivityIndicatorView *)spinner {
    [self.spinner stopAnimating];
    [self.spinner removeFromSuperview];
    [self performSegueWithIdentifier:@"showMyPlans" sender:nil];
}

【讨论】:

  • 这个答案对我来说就像一个魅力,我只是想补充一点,如果你们希望在使用导航控制器并单击返回时再次出现活动指示器,然后删除“[self .spinner removeFromSuperview];"行,并确保您已在情节提要上检查活动指示器在不动画时是隐藏的
【解决方案2】:

只需更改您的代码,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      [self useActivityIndicator];
   });

   if ([[segue identifier] isEqualToString:@"ShowAdsDetail"])
   {
      //do anything that needs to be done
   }
}



-(void)useActivityIndicator
{
       dispatch_async(dispatch_get_main_queue(),^{
         [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
         [activityView startAnimating];
         subView.hidden = NO;
      });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多