Индикатор активности блокируется кнопкой

Я добавил индикатор активности на моей кнопке, и анимировать его, когда кнопка нажата, однако, он анимирует каждый раз, но это не видно, вот мой код:

DispatchQueue.global(qos: .userInitiated).async {
        self.openCircle(withCenter: sender.center, dataSource: self.calculator!.iterateWPItems()){}
        DispatchQueue.main.sync {
            self.activityIndicator.stopAnimating()
        }
    }
    activityIndicator.startAnimating()

2 ответа

  1. Просто напишите это completion handler.Нет необходимости использовать dispatch_after

            self.activityIndicator.startAnimating()
        print(activityIndicator.isAnimating)
    
        openCircle(withCenter: sender.center, dataSource: calculator!.iterateWPItems()){
    
    // place webservice data processing here
            dispatch_async(dispatch_get_main_queue()) { 
                    activityIndicator.stopAnimating();
            }
        }
    

    Swift 3:

        self.activityIndicator.startAnimating()
        print(activityIndicator.isAnimating)
    
        openCircle(withCenter: sender.center, dataSource: calculator!.iterateWPItems()){
    // place webservice data processing here
    
            DispatchQueue.main.async { 
              self.activityIndicator.stopAnimating()
    
            }
        }
    
  2. Предполагается, что ваш openCircleметод является асинхронным методом. Я думаю, что вы должны остановить индикатор активности, когда вы получаете звонок от вашего метода. Попробуйте этот измененный код.

    self.activityIndicator.startAnimating()
    print(activityIndicator.isAnimating)
    
    openCircle(withCenter: sender.center, dataSource: calculator!.iterateWPItems()){
        dispatch_async(dispatch_get_main_queue()) { 
                activityIndicator.stopAnimating();
        }
    }
    

    Для Swift 3,

    self.activityIndicator.startAnimating()
    print(activityIndicator.isAnimating)
    
    openCircle(withCenter: sender.center, dataSource: calculator!.iterateWPItems()){
        DispatchQueue.main.async { 
            self.activityIndicator.stopAnimating()
        }
    }
    

    Использование NSOperation,

    self.activityIndicator.startAnimating()
    print(activityIndicator.isAnimating)
    
    openCircle(withCenter: sender.center, dataSource: calculator!.iterateWPItems()){
        OperationQueue.main.addOperation {
           self.activityIndicator.stopAnimating()
        }
    }