并提前感谢您的关注。我试图在我的简单应用程序中实现一点动画效果,这次使用 UIPickerView 对象。
基本上,当某个事件发生时,我希望我的选择器视图能够动画自己选择它的最后一行(当然有动画),然后立即(没有任何进一步的用户交互)它的第一行(当然有动画)。我猜,这是为了给出一个“应用程序变得疯狂”的效果,这应该是非常机智的。
因此我的代码是:
[myPicker selectRow:[myPicker numberOfRowsInComponent:0]-1 inComponent:0 animated:YES];
[myPicker selectRow: 0 inComponent:0 animated:YES];
我得到的是选择器将只执行第二条指令,无论其中指定的行如何。它似乎忽略了第一个。
我认为这可能是编译器的一些“聪明”功能,它指出以下两条指令执行对同一个变量的赋值,因此最好忽略第一个(不考虑“动画”因素)。我不知道是否是这种情况,但我试图根据某个参数的值在两个 if 语句中移动这两条指令,试图以这种方式愚弄编译器(它在编译时无法知道该参数的值,因此它不应该执行这样的优化)。它不起作用,要么是因为我完全没有踪迹,要么是因为编译器比我聪明得多。我什至认为这可能是延迟和正确事件顺序的问题,因此我尝试如下重写代码
-(void) setPickerRowToLastRow;
{
[myPicker selectRow:[myPicker numberOfRowsInComponent:0]-1 inComponent:0 animated:YES];
}
-(void) setPickerRowToFirstRow;
{
[myPicker selectRow:0 inComponent:0 animated:YES];
}
.....
[self performSelector: @selector(setPickerRowToLastRow)
withObject: nil
afterDelay: 1];
[self performSelector: @selector(setPickerRowToFirstRow)
withObject: nil
afterDelay: 1];
它没有工作:选择器仍然只执行第二个动作,它只会移动一次。
现在的问题是:
为什么选择器只移动一次?
我怎样才能达到我的目标(即使可能有点微不足道)?