UIPickerView动画故障

时间:2011-08-06 22:50:52

标签: objective-c ios animation uipickerview uianimation

我遇到了一个问题,我试图实现UIPickerView在按下按钮时向上滑动的效果。

   -(IBAction)slideUp:(id)sender{
if([sender currentTitle] == @"Select"){

[pickerView setFrame: CGRectMake(0, 415.0, 320.0, 216.0)];
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
[pickerView setFrame: CGRectMake(0, 201.0, 320.0, 216.0)];
[UIView commitAnimations];
[slideButton setTitle:@"Done" forState:UIControlStateNormal];

} }

正如您所看到的,代码首先检查按钮的标题是“选择”还是“完成”,如果选择它,则在UIPickerView中滑动。但是,每次构建应用程序时,第一次按下按钮时,UIPickerView会立即显示在结束位置,然后滑出视图。按钮标题不会更改。在这个初始故障之后,它工作正常。

如果您知道为什么会发生这种情况,或者可以想到快速修复它,我会非常感激。

1 个答案:

答案 0 :(得分:0)

我不确定你为什么会遇到这个故障,但我会在你的代码中做一些不同的事情。首先,我会在其他方法中设置拾取器视图的初始帧,在远处的某个位置(可能在创建它之后)。然后我只是将动画块之前的初始帧引用到新的CGRect结构中,我将对其进行动画和重新分配。其次,如果你只想为选择器视图的y分量设置动画,那么我也会在动画中指定它。

以下是我对代码的更改:

-(IBAction)slideUp:(id)sender {

if([sender currentTitle] == @"Select") {

CGRect pickerFrame = pickerView.frame;   // You set pickerView.frame in some other method.

[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];

pickerFrame.origin.y = 201.0f;
pickerView.frame = pickerFrame;

[UIView commitAnimations];

[slideButton setTitle:@"Done" forState:UIControlStateNormal];

}

告诉我这是否有用。