簡體   English   中英

當網絡活動開始並停止時,添加活動指示器以開始並停止

[英]add activity indicator to star and stop when network activity star and stop

我正在開發一個使用Parse Backends的iOS應用程序,並且我想在網絡狀態中的網絡活動開始時,在導航欄中顯示Acctivity Indicator以激活動畫,以便在網絡中停止活動時在導航欄中停止為我的Activity指示器設置動畫。狀態欄。

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;

}

解析調用是同步的,這意味着它們與應用中發生的其他事件同時發生,而不是線性發生。 當您調用[curQuery findObjectsInBackground... ,您的主線程將創建一個新線程來進行服務器調用,並最終在您的塊中運行該東西。 然后,在執行該塊之前,主線程立即轉到if ([PFUser currentUser]) {行。

您需要執行[activityIndicator startAnimating]; 在您的回調塊之后,您在回調塊中要做的第一件事是[activityIndicator stopAnimating];

但是,您可能會在第一個startAnimating調用之前進行第二個stopAnimating調用,這會產生意外的后果,即過早地終止activityIndi​​cator。 您將必須找到一種方法來跟蹤正在使用該activityIndi​​cator的事物。 即,創建一個int存儲使用activityIndi​​cator多少東西。 如果它是0,並且您嘗試啟動指示器,則增加並啟動指示器。 如果它> 0,請增加它,因為它已經在運行。 執行相反的操作以停止活動指示器。 如果> 1,則將int遞減。 如果它== 1,則減為0並停止活動指示器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM