Swift iOS App UIPickerView如何知道动画何时完成?

时间:2018-05-23 08:09:04

标签: ios swift xcode uipickerview

我的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

0 个答案:

没有答案