我有一个UIPickerView多个组件.有些值是灰色的,我pickerView:didSelectRow:inComponent尊重这一点,将有问题的选择器组件移动到最接近的有效值,就像UIDatePicker选择"二月"时从"30"移动到"28"一样.然后它调用委托方法来宣布调整后的值.
当我的调整器方法调用我UIPickerView的时selectRow:inComponent:animated:YES,屏幕上的值是正确的,但是来自的值selectedRowInComponent:是陈旧的(从调整灰度值之前).但是,如果我调用selectRow:inComponent:animated:NO,返回的值是正确的,但缺少动画是不和谐的.
我已经尝试在beginAnimations:/ commitAnimations块中包装调整并捕获UIView's中的值+animationDidStopSelector,但我仍然得到过时的值.有没有人遇到过这个?
这个问题很容易复制.
[picker selectRow:newValue inComponent:i+offset animated:YES];
retValue = [picker selectedRowInComponent:i+offset];
Run Code Online (Sandbox Code Playgroud)
如果你有动画它的YES,那么retValue就是0(你称之为陈旧).更改为NO,retValue将与newValue相同.
我没有注意到这一点,但一个简单的技巧可能是执行动画操作,然后一旦动画完成,只需在没有动画的情况下再次执行即可。那么结果selectedRowInComponent应该是正确的。
但是,从您的测试代码看来,它返回了正确的结果。如果您要求选取器选择动画行,则在动画完成之前不会设置新值,因此如果您在刚开始动画后立即询问所选行(无论如何,直到下一个运行循环才会开始) ),那么你将得到旧的结果。
无论如何,你到底是如何捕捉动画的结尾的,你能展示你使用的代码吗?
另一个问题是,为什么你需要它立即正确?如果您显式地设置选择器,那么您已经确切地知道正在设置什么值,那么为什么还要再次询问呢?
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |