底部弹出UIPicker?

时间:2010-08-09 15:38:08

标签: iphone uipickerview

当一个动作被调用时,UIPicker是从屏幕底部弹出的,只是以某种方式协调的基本UIPickerView? (就像UIActionSheet?)我将如何实现它?

4 个答案:

答案 0 :(得分:4)

这是我使用的动画代码:

- (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]

slideDownDidStop是一个方法,将在datePicker成功滑下后调用。

所以,总结一下 - 你有MyViewController,有

MyDatePickerView *myDatePicker;

字段。

MyDatePickerView是一个自定义类,具有UIDatePicker * datePicker字段,MyViewController * parentViewController和animateDatePicker方法。

当您在MyViewController上执行某些操作时(例如,某些按钮的UIControlEventTouchUpInside),您应该调用

[myDatePicker animateDatePicker:YES];

如果您有任何疑问,请与我们联系。

<强>更新 这是一个很小的example

答案 1 :(得分:0)

将UIPickerView放入新的UIViewController类(让我们称之为PopupUIPicker),然后通过以下方式显示该视图控制器:

PopupUIPicker *pickerController = [[[PopupUIPicker alloc] init] autorelease];
[currentViewController presentModalViewController:pickerController animated:YES];

如果currentViewController是您希望在其上显示的View Controller。解雇它:

[currentViewController dismissModalViewControllerAnimated:YES];

默认动画是从底部向上滑动。你可以改变它:

pickerController.modalTransitionStyle = UIModalTransitionStylePartialCurl;

答案 2 :(得分:0)

“在调用某个动作时从屏幕底部弹出的UIPicker”是什么意思?

如果您想大致了解Facebook应用的功能,请查看Three20这是他们的开源UI库(不保证他们使用的组件在那里;我没有检查过)。

答案 3 :(得分:0)

我和Rob有同样的问题...我可以制作UIPicker弹出窗口...但是它填满了整个屏幕...我想只需要弹出选择器...... Matt说你没必要使视图占据整个框架...调整视图大小不起作用...如何让弹出的选择器弹出?我仍然看到父视图的一部分......就像iphone上的safari处理下拉菜单一样。