前面iOS開發之UIPickerView控件的簡單使用 (見 http://www.linuxidc.com/Linux/2012-08/67784.htm) 用到的UIPickerView彈出來是通過 textField.inputView = selectPicker; textField.inputAccessoryView = doneToolbar; 這中方法來做的。如果UIPickerView或UIDatePicker控件通過其他按鈕或事件激活的時候怎麼能像系統那樣彈出來呢?為了實現這個需求,就要用到動畫效果了。
1、新建一個Single View App項目,在.xib文件中添加控件如下:
兩個button,一個UIDatePicker。
2、創建xib和ViewController的連接
按住Control鍵創建三個控件對於的映射。
創建後viewController.h代碼如下
- #import <UIKit/UIKit.h>
-
- @interface ViewController : UIViewController
- @property (retain, nonatomic) IBOutlet UIDatePicker *pickerView;
- - (IBAction)popView:(id)sender;
- - (IBAction)inView:(id)sender;
- @property (nonatomic, retain) NSString *string;
- @end
3、隱藏pickerView
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- self.pickerView.frame = CGRectMake(0, 480, 320, 260);
- }
把pickerView 放到屏幕以為下面。
4、彈出和彈回pickerView
在pickerView彈出來或回去的時候,設置動畫
- - (IBAction)popView:(id)sender {
-
- CGContextRef context = UIGraphicsGetCurrentContext();
- [UIView beginAnimations:nil context:context];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:0.6];//動畫時間長度,單位秒,浮點數
- [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
- self.pickerView.frame = CGRectMake(0, 245, 320, 260);
-
- [UIView setAnimationDelegate:self];
- // 動畫完畢後調用animationFinished
- [UIView setAnimationDidStopSelector:@selector(animationFinished)];
- [UIView commitAnimations];
- }
-
- - (IBAction)inView:(id)sender {
- CGContextRef context = UIGraphicsGetCurrentContext();
- [UIView beginAnimations:nil context:context];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:0.6];//動畫時間長度,單位秒,浮點數
- self.pickerView.frame = CGRectMake(0, 480, 320, 260);
-
- [UIView setAnimationDelegate:self];
- // 動畫完畢後調用animationFinished
- [UIView setAnimationDidStopSelector:@selector(animationFinished)];
- [UIView commitAnimations];
- }
- -(void)animationFinished{
- NSLog(@"動畫結束!");
- }
動畫結束後回調動畫結束的函數。
運行,彈出
第一個圖片是彈出來到一半,第二個圖片彈出全部。