可以取消UIPickerView动量动画吗?

时间:2010-12-07 22:35:48

标签: iphone objective-c cocoa-touch uipickerview

我正在尝试使用UIPickerView设置一个UI,该UIPickerView是根据UITableView中的选定行填充的。从本质上讲,它与您在“开始”和“开始”中看到的UI相同。用于在日历应用中添加活动的结束屏幕。

http://raoli.com/files/uipicker.png

我已经拥有了我的数据源和委托的设置,因此根据选择填充了选择器并正确更新了我的模型......大部分时间。

我得到的一个问题是当有人轻弹选择器视图然后更改选择是在表视图中时,UIPickerViewDelegate会尝试在表视图中记录对新选择的更改,而不是原始选择。很明显在我的代码中为什么会发生这种情况,我有一些想法可以让我更好地表现,但我想我会看到Apple在他们的UI中做了什么。

当您拣选器并在拾取器完成旋转之前切换时间时,旋转立即停止,拾取器更新为新类型时间的值,并且原始时间类型保持不变。我没有看到任何取消动画的方法,但我可能错了。我希望我错了,因为它会让我的生活变得更轻松。

我能看到的另一个选择是每个属性的不同UIPickerViews并将它们切换出来。所以,显然,Apple示例将有2个UIPickerView实例。这只是创造了需要完成的其他工作,我想我会看到是否有办法用最少的观点来做到这一点。

更新 Aaron的想法显示了一些承诺,但看起来有很多关于如何根据选择器的状态将消息传递给代理的边缘情况,主要是选择器是否目前是动画。由于似乎无法确定选择器当前是否在旋转(至少通过公共API),因此尝试解决可能的配置似乎存在问题。我最终选择了多个选择器,当所选属性发生更改时切换选择器的可见性,并忽略来自现在隐藏的UIPickerView实例的委托消息。

1 个答案:

答案 0 :(得分:3)

我认为

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated

将是一个很好的候选人。如果animatedNO,则应立即显示您想要的内容而不会移动。

当您决定设置数据时,请在选择器视图上调用该方法以反映该设置。我希望它会覆盖任何当前的动画或惯性效果,并希望你不会在代表中收到didSelectRow:。如果你这样做,可能有必要忽略它。