前面iOS學習之UIPickerView控制項的簡單使用 用到的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(@"動畫結束!");}
動畫結束後回調動畫結束的函數。
運行,彈出 第一個圖片是彈出來到一半,第二個圖片彈出全部。4、代碼塊的方法做動畫彈出pickerView單獨寫個方法
- (void)ViewAnimation:(UIView*)view willHidden:(BOOL)hidden { [UIView animateWithDuration:0.3 animations:^{ if (hidden) { view.frame = CGRectMake(0, 480, 320, 260); } else { [view setHidden:hidden]; view.frame = CGRectMake(0, 245, 320, 260); } } completion:^(BOOL finished) { [view setHidden:hidden]; }];}
5、在Action中調用
- (IBAction)popView:(id)sender { [self ViewAnimation:self.pickerView willHidden:NO];}- (IBAction)inView:(id)sender { [self ViewAnimation:self.pickerView willHidden:YES];}
這個方法更簡單實用
PS:以上的方法可以用在TableViewCell點擊cell時彈回pickerView等需求.例子源碼:http://download.csdn.net/detail/totogo2010/4472062
著作權聲明:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝