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