我遇到了一个问题,我试图实现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会立即显示在结束位置,然后滑出视图。按钮标题不会更改。在这个初始故障之后,它工作正常。
如果您知道为什么会发生这种情况,或者可以想到快速修复它,我会非常感激。
路
答案 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];
}
告诉我这是否有用。