【问题标题】:add activity indicator to star and stop when network activity star and stop添加活动指示器以在网络活动启动和停止时启动和停止
【发布时间】:2015-09-13 06:38:13
【问题描述】:

我正在开发一个使用 Parse 后端的 iOS 应用程序,我想在我的导航栏中显示活动指示器以在状态栏中的网络活动星标时显示动画,因此当网络停止时停止在导航栏中为我的活动指示器设置动画状态栏中的活动。

self.navigationController.navigationBar.barTintColor = BLUE_COLOR; self.navigationItem.title = @"MyAppname";

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
activityIndicator.hidesWhenStopped = YES;
//[activityIndicator startAnimating];



self.photoArray =[[NSMutableArray alloc]init];

PFQuery* curQuery = [UserParseHelper query];

[curQuery whereKey:@"username" equalTo:[UserParseHelper currentUser].username];
[curQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    self.mainUser = objects.firstObject;

    if (self.mainUser.geoPoint != nil) {
        [self queryParseMethod];
    } else {
        [self currentLocationIdentifier];
    }
}];

if ([PFUser currentUser]) {
    PFQuery *usr = [UserParseHelper query];
    [usr whereKey:@"objectId" equalTo:[UserParseHelper currentUser].objectId];
    [usr findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        self.userStart = [UserParseHelper alloc];
        self.userStart = objects.firstObject;
        self.userStart.online = @"yes";
        [self.userStart saveEventually];

    }];
}


self.segmentedControl.selectedSegmentIndex = 2;

}

【问题讨论】:

  • 那么你的问题是什么?

标签: ios parse-platform uinavigationbar uiactivityindicatorview


【解决方案1】:

解析调用是同步的,这意味着它们与您的应用程序中发生的其他事情同时发生,而不是线性发生。当您调用[curQuery findObjectsInBackground... 时,您的主线程将创建一个新线程,该线程将调用服务器并最终运行您块内的内容。然后,在该块被执行之前,主线程立即转到if ([PFUser currentUser]) { 行。

您需要在回调块之后立即执行[activityIndicator startAnimating];,并且您在回调块中执行的第一件事是[activityIndicator stopAnimating];

但是,您可能会在第一次调用 stopAnimating 之前进行第二次 startAnimating 调用,这会产生过早结束 activityIndi​​cator 的意外效果。您必须找到一种方法来跟踪有多少事物正在使用该活动指示器。即,创建一个 int 来存储使用 activityIndi​​cator 的事物的数量。如果它为 0,并且您正在尝试启动指标,则递增并启动指标。如果它 > 0,只需增加它,因为它已经在运行。做相反的事情来停止活动指示器。如果它> 1,只需递减int。如果是 == 1,则减为 0 并停止活动指示器。

【讨论】:

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