【问题标题】:UIActivityIndicator not showing upUIActivityIndi​​cator 没有出现
【发布时间】:2009-12-31 08:11:29
【问题描述】:

我已经实现了一个 UIActivityIndi​​cator,它显示在我的程序的一部分中,而不是另一部分。我在加载表格时出现了活动指示器,但是,在用户单击按钮并等待表格重新加载后,我试图让它再次开始动画。表重新加载,但没有指示符。这是代码。

- (void)viewWillAppear:(BOOL)animated {
    CGRect frame = CGRectMake (120.0, 185.0, 80, 80);
    activity = [[UIActivityIndicatorView alloc] initWithFrame: frame];
    activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
    [activity startAnimating];

    [navigationUpdateFromDetail.window addSubview: activity];

    [super viewWillAppear:animated];
}

它出现在那个部分。但是,对于下一部分,它似乎不想出现。

- (IBAction) btnGreaterTen_clicked :(id)sender {

    self.searchDistance = [NSNumber numberWithDouble : 10];

    CGRect frame = CGRectMake (120.0, 185.0, 80, 80);

    activity = [[UIActivityIndicatorView alloc] initWithFrame: frame];
    activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;

    [navigationUpdateFromDetail.window addSubview: activity];
    [activity startAnimating];


    NSLog(@" search value after change %@", [searchDistance description]);

    [self getSetDisplay];

    [activity stopAnimating];
}

那个按钮改变了一个变量,并假设开始动画,但它没有。我已经改变了颜色以确保它不仅仅是混合,所以这不是解决方案。我试图重新创建相同的对象,但仍然没有运气。 提前谢谢你。

【问题讨论】:

  • 在第一种情况下,您的指示器何时停止动画?
  • getSetDisplay 完成后立即停止
  • 看我的回答。你的解决方案永远不会奏效。
  • 哦,抱歉,我没有在代码中包含该部分,但它在 -(void)viewDidAppear 方法中停止

标签: iphone objective-c uiactivityindicatorview


【解决方案1】:

这是行不通的,因为动画只会在主应用程序循环“运行”时显示。在您的代码中,您通过调用 [self getSetDisplay] 来阻塞主线程。

您应该异步加载数据以使其工作(在后台线程中)。然后你可以调用startAnimating,启动你的线程,当线程结束时,停止动画。

【讨论】:

  • 我不太清楚在后台加载它是什么意思,我在启动动画后调用 [self getSetDisplay]。那么主线程不是在运行它的循环吗?
  • 从你所说的来看,这是有道理的,因为在主循环上运行的 -viewWillAppear 方法中调用了第一个活动指示器。我的功能不是。那么我需要一起实现不同的功能吗?
  • 这个解决方案是正确的。我删除了 [self getSetDisplay] 函数并保持活动指示器运行并弹出。但我仍然不知道如何解决它。
  • 查看这个问题:stackoverflow.com/questions/1879248/… 或查看 Apple 开发者网站上的线程文档:developer.apple.com/iPhone/library/documentation/Cocoa/…
  • 谢谢,我得到了“performinbackground”类的实现,但是我似乎找不到如何监控回调。你怎么知道它已经完成了?
【解决方案2】:

这已经困扰我很久了,我刚刚发现在使用搜索显示控制器时,我必须将活动指示器添加为搜索结果的子视图才能显示。在我的 viewDidLoad 中,我把...

// create activity indicator
activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
[self.searchDisplayController.searchResultsTableView addSubview:activityIndicator];

当我想开始制作动画时,我放...

[activityIndicator setCenter:CGPointMake(self.searchDisplayController.searchResultsTableView.frame.size.width/2.0f, self.searchDisplayController.searchResultsTableView.frame.size.height/2.0f)];
[activityIndicator startAnimating];

希望这对某人有所帮助。

【讨论】:

    【解决方案3】:

    尝试添加

    activity.hidden = NO;
    

    就在之前

    [activity startAnimating];
    

    【讨论】:

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