2015-10-20 5 views
1

Я пытаюсь реализовать UIActivityIndicatorView, который выполняется, пока пользователь находится в середине покупки приложения. По какой-то причине UIActivityIndicatorView не отображается, даже если я сделал это, если под просмотр представлений.UIActivityIndicatorView не отображается

class RemoveAdsViewController: UIViewController { 

@IBAction func btnAdRemoval(sender: UIButton) { 
    let buyProgress = UIActivityIndicatorView(activityIndicatorStyle: .White) 
    buyProgress.center = self.view.center 
    self.view.addSubview(buyProgress) 
    buyProgress.startAnimating() 
    print(buyProgress) 
    PFPurchase.buyProduct("", block: { (error:NSError?) -> Void in 
     if error != nil{ 
      let alert = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.Alert) 

      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    }) 
    buyProgress.stopAnimating() 
    buyProgress.removeFromSuperview() 
} 

PFRestore:

restoreProgress.startAnimating() 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { 
     PFPurchase.restore() 
     dispatch_async(dispatch_get_main_queue(), { 
      restoreProgress.stopAnimating() 
     }) 
}) 
+0

Посмотреть все вопросы, связанные с показанными справа -> Вы должны проверить их. Об этом вопросе спрашивали и отвечали раньше. – rmaddy

+1

@rmaddy Я уже проверил их, и ответы не решили мою проблему, поэтому я разместил свой собственный вопрос. – wxcoder

ответ

1

После другой взгляд, проблема проста. Вы слишком быстро останавливаете и удаляете индикатор активности. Вам нужно остановить и удалить его в блоке завершения.

@IBAction func btnAdRemoval(sender: UIButton) { 
    let buyProgress = UIActivityIndicatorView(activityIndicatorStyle: .White) 
    buyProgress.center = self.view.center 
    self.view.addSubview(buyProgress) 
    buyProgress.startAnimating() 
    print(buyProgress) 
    PFPurchase.buyProduct("", block: { (error:NSError?) -> Void in 
     buyProgress.stopAnimating() 
     buyProgress.removeFromSuperview() 

     if error != nil{ 
      let alert = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.Alert) 

      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    }) 
} 

Вам также необходимо убедиться, что содержимое блока завершения выполняется на основном потоке.

+0

Это отображает индикатор активности, но после завершения транзакции UIActivityIndicatorView продолжает вращаться, потому что нет ошибки – wxcoder

+0

Вы сделали свой код, как я сделал в ответ? – rmaddy

+0

Я положил его в неправильное место, моя ошибка. Спасибо. – wxcoder

0

Проблема заключается вы делаете это

buyProgress.startAnimating() 

а затем это немедленно

buyProgress.stopAnimating() 

потому что PFPurchase.buyProduct является асинхронной называют это будет немедленно вернуться и вы не видите ваш индикатор активности анимации, как его все происходит в одном цикле цикла запуска.

вам нужно переместить

buyProgress.stopAnimating() 

внутри затвора, как так

PFPurchase.buyProduct("", block: { (error:NSError?) -> Void in 
      if error != nil{ 
       let alert = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.Alert) 
       buyProgress.stopAnimating() 

       alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

       self.presentViewController(alert, animated: true, completion: nil) 
      } 
     }) 
Смежные вопросы