0

В Swift 2.0 я использую веб-API для загрузки и скачивания некоторых данных. Перед вызовом API я начал анимацию индикатора активности и хочу остановить его, когда пришел ответ API.animateWithDuration вызов после долгого времени, когда он написан в URLSession

Однако, когда я хочу остановить анимацию после ответа API, индикатор останавливается после долгого ожидания.

Вот мой код:

let activityIndi = UIActivityIndicatorView(activityIndicatorStyle: .White) 
    activityIndi.startAnimating() 
    flagBtn.addSubview(activityIndi) 
    let urlString = NSURL(string: "URL") 
    NSURLSession.sharedSession().dataTaskWithURL(urlString!, completionHandler: { (data: NSData?, _, _) -> Void in 
     if data != nil { 
      do { 
       let jsonInfoDic = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! [String:AnyObject] 
       if(jsonInfoDic["status"] as! Bool) 
       { 
        UIView.animateWithDuration(1.0, animations: { 
         activityIndi.stopAnimating() 
         }, completion:{ (finished: Bool) -> Void in 
        }) 
       } 
      } 
      catch { print("Exception in parsing JSON.\n\nReason: \(error)") } 
     } 
    }).resume() 

ответ

2

Вы должны выполнить UI модифицирующие операции в главном потоке. Поскольку обратный вызов dataTaskWithURL:completionHandler: выполняются в фоновом потоке (NSURLSession нити), вы должны послать код интерфейса следующим образом:

dispatch_async(dispatch_get_main_queue()) { 
    activityIndi.stopAnimating() 
} 

Кроме того, я подозреваю, что вам не нужен будет UIView.animateWithDuration:completion:, потому что stopAnimating выполняет анимацию сам по себе.