当调用某个操作时,从屏幕底部弹出的 UIPicker 只是一个基本的 UIPickerView,并以特定的方式协调吗?(就像 UIActionSheet 一样?)我该如何实现它?
当调用某个操作时,从屏幕底部弹出的 UIPicker 只是一个基本的 UIPickerView,并以特定的方式协调吗?(就像 UIActionSheet 一样?)我该如何实现它?
这是我使用的动画代码:
- (void)animateDatePicker:(BOOL)show {
CGRect screenRect = self.frame;
CGSize pickerSize = [self.datePickerView sizeThatFits:CGSizeZero];
CGRect startRect = CGRectMake(0.0,
screenRect.origin.y + screenRect.size.height,
pickerSize.width, pickerSize.height);
CGRect pickerRect = CGRectMake(0.0,
screenRect.origin.y + screenRect.size.height - pickerSize.height,
pickerSize.width,
pickerSize.height);
self.datePickerView.frame = pickerRect;
self.backgroundColor = UIColorMakeRGBA( 64, 64, 64, 0.7f - (int)show * 0.7f );
if ( show ) {
self.datePickerView.frame = startRect;
[self.parentViewController addSubviewToWindow:self];
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3f];
[UIView setAnimationDelegate:self];
self.backgroundColor = UIColorMakeRGBA( 64, 64, 64, 0.0f + (int)show * 0.7f );
if ( show ) {
self.datePickerView.frame = pickerRect;
} else {
[UIView setAnimationDidStopSelector:@selector(slideDownDidStop)];
self.datePickerView.frame = startRect;
}
[UIView commitAnimations];
}
datePickerView是一个包含DatePicker的视图:
self.datePickerView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 174.0, 320.0, 286.0)];
self.datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 70.0, 320.0, 216.0)];
[self.datePicker setDatePickerMode:UIDatePickerModeDate];
[self.datePicker addTarget:self action:@selector(pickerValueChanged:) forControlEvents:UIControlEventValueChanged];
[self.datePickerView addSubview:self.datePicker];
parentViewController应该实现addSubviewToWindow方法:
- (void)addSubviewToWindow:(UIView *)addView {
[self.view addSubview:addView];
}
UIColorMakeRGBA:
#define UIColorMakeRGBA(nRed, nGreen, nBlue, nAlpha) [UIColor colorWithRed:(nRed)/255.0f green:(nGreen)/255.0f blue:(nBlue)/255.0f alpha:nAlpha]
MyDatePickerView *myDatePicker;
字段。
MyDatePickerView 是一个自定义类,拥有一个 UIDatePicker *datePicker 字段、一个 MyViewController *parentViewController 和一个 animateDatePicker 方法。
当您在 MyViewController 上执行某些操作(例如,为某个按钮的 UIControlEventTouchUpInside 事件),您应该调用
[myDatePicker animateDatePicker:YES];
如果您有问题,请告诉我。
更新: 这里有一个小示例。
将UIPickerView放入新的UIViewController类中(我们称之为PopupUIPicker),然后通过以下方式显示该视图控制器:
PopupUIPicker *pickerController = [[[PopupUIPicker alloc] init] autorelease];
[currentViewController presentModalViewController:pickerController animated:YES];
其中currentViewController是您要在其上显示它的视图控制器。 要关闭它:
[currentViewController dismissModalViewControllerAnimated:YES];
默认的动画是从底部向上滑动。您可以像这样更改:
pickerController.modalTransitionStyle = UIModalTransitionStylePartialCurl;
我和Rob一样也遇到了同样的问题...我可以使UIPicker弹出...但它会填满整个屏幕...我只想让选择器弹出...Matt说您不必使视图占据整个框架...仅调整视图大小是行不通的...您如何让只有选择器弹出?我仍然希望看到父视图的部分...就像iPhone上的Safari处理下拉菜单一样。