Iphone 是否可以取消UIPickerView动量动画?

Iphone 是否可以取消UIPickerView动量动画?,iphone,objective-c,cocoa-touch,uipickerview,Iphone,Objective C,Cocoa Touch,Uipickerview,我正在尝试使用UIPickerView设置UI,该UI是基于UITableView中的选定行填充的。本质上,它与您在开始和结束屏幕中看到的用于在日历应用程序中添加事件的UI相同 我已经有了我的数据源和代理的设置,因此它会根据选择填充选择器,并正确更新我的模型。。。大多数时候 我遇到的一个问题是,当有人轻弹选择器视图,然后在表视图中更改选择时,UIPickerViewDeleteGate会尝试在表视图中记录新选择的更改,而不是原始选择。这显然是我的代码中出现这种情况的原因,我有一些想法来修改我的

我正在尝试使用UIPickerView设置UI,该UI是基于UITableView中的选定行填充的。本质上,它与您在开始和结束屏幕中看到的用于在日历应用程序中添加事件的UI相同

我已经有了我的数据源和代理的设置,因此它会根据选择填充选择器,并正确更新我的模型。。。大多数时候

我遇到的一个问题是,当有人轻弹选择器视图,然后在表视图中更改选择时,UIPickerViewDeleteGate会尝试在表视图中记录新选择的更改,而不是原始选择。这显然是我的代码中出现这种情况的原因,我有一些想法来修改我的系统,使其更好地运行,但我想我会看到苹果在他们的UI中做了什么

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

我可以看到的另一种选择是对每个属性使用不同的UIPickerViews,并将它们切换出去。因此,很明显,Apple示例将有2个UIPickerView实例。这只会创建其他需要完成的工作,我想我会看看是否有一种方法可以用最少的视图数来完成

更新Aaron的想法显示出了一些希望,但似乎有一些边缘案例是关于如何根据选择器的状态将消息传递给代理的,主要是选择器当前是否正在制作动画。由于似乎无法确定选择器当前是否正在旋转(至少通过公共API),因此尝试绕过可能的配置似乎有问题。我最终使用了多个选择器,在选定属性更改时切换选择器的可见性,并忽略现在隐藏的UIPickerView实例中的代理消息。

我认为

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated
他将是一个很好的候选人。如果
已设置动画
则应立即显示所需内容,而无需移动


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

好主意,我没有想到,但不幸的是,它似乎没有马上奏效。看起来像是
pickerView:didSelectRow:incomonent:
实际从微调器获取值,而不是将传入的值作为
。因此,即使我传入0,我的UIPickerDelegate在调用
didSelectRow:
delegate方法时也会得到类似13的值。然而,您已经产生了一个想法,可以通过一个子类来解决这个问题。谢谢我很困惑-您是否尝试了selectRow或didSelectRow来设置微调器?我调用了
selectRow:Incomonent:animated
来设置微调器,然后调用UIPickerView委托方法
pickerView:didSelectRow:Incomonent:
。selectRow是否停止了动画?如果它这样做了,那么你可以设置一个你调用它的标志记录,忽略结果didSelectRow?它确实停止了动画,这就是我的想法。今天早上我玩了一点,当我在数据集不旋转的情况下更改数据集时,它似乎引入了一些奇怪的东西。看起来它可能会在可能的情况下合并更新。在这种特定情况下,如果我清除调用
reloadAllComponents
中的取消标志,这似乎是可行的,但可能会有一些我遗漏的边缘情况(例如,在我的脑海中,如何处理
reloadallcomponent:
)。