Swift iOS App UIPickerПросмотреть, как узнать, когда анимация сделана? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть «казино-машина» в моем приложении для iOS с 3 UIPickerView объектами.

Когда моя кнопка нажата, эта функция запускается в каждом сборщике (я создал свой собственный UIPickerView подборщик классов):

func selectRandomRow()
{
    // Aller à la ligne numéro randomNumber
    let randomRow = FDUtils.shared.random(min: 1, max: self.pickerDataSize - 2)

    if (self.selectedRow(inComponent: 0) != 0)
    {
        goToRow(valueToGo: randomRow)
    }
    else
    {
        self.selectRow(randomRow, inComponent: 0, animated: false)
    }
}

goToRow Функция:

func goToRow(valueToGo: Int)
{
    FDUtils.shared.delay(0.1, closure:
    {
        let currentRow = self.selectedRow(inComponent: 0)

        if (currentRow > valueToGo)
        {
            self.selectRow(currentRow - 1, inComponent: 0, animated: true)
            self.goToRow(valueToGo: valueToGo)
        }
        else if (currentRow < valueToGo)
        {
            self.selectRow(currentRow + 1, inComponent: 0, animated: true)
            self.goToRow(valueToGo: valueToGo)
        }
        else if (currentRow == valueToGo)
        {
            print("currentRow == valueToGo")
            self.isUserInteractionEnabled = false
            self.delegateGame.didRowSelected()
        }
    })
}

Моя функция FDUtils.shared.delay:

func delay(_ delay:Double, closure:@escaping ()->())
{
    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}

Когда каждый сборщик сделан (Я считаю готовым, когда delegateGame.didRowSelected() вызывается) У меня есть функция, которая показывает уведомление пользователю.Проблема в том, что если анимация включена, делегат вызывает функцию didRowSelected до того, как анимация завершена.

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

Как узнать, какова продолжительность анимации UIPickerView?(а затем установите задержку перед вызовом didRowSelected, но я не уверен, что это чистое решение) или как я могу позвонить didRowSelected после завершения анимации?

...