ボタンを押した後にUIPickerViewをアニメーション表示するにはどうすればいいですか?

私はボタンを押した後に私のUIPickerViewをアニメーション化したい。私はすでにUIPickerViewをviewDidLoadで非表示にし、ボタンを押した後に非表示にするようにコーディングしましたが、ModalViewControllerがデフォルトでどのようにアニメーション化されるかはアニメーション化されません。私はちょうどModalViewControllerがデフォルトでアニメーションを作成するのと同じように私のUIPickerViewをアニメーション化したい。

私はすでにサイトやウェブ上で研究してきましたが、適切に行うことはできません。

ここに私のコードです:

#pragma mark - Picker View 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return 4;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    timersArray = [[NSMutableArray alloc] init];
    [timersArray addObject:@"No timer"];
    [timersArray addObject:@"15 seconds"];
    [timersArray addObject:@"30 seconds"];
    [timersArray addObject:@"60 seconds"];

    return [timersArray objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if ([[timersArray objectAtIndex:row] isEqual:@"No timer"])
    {
        timerIndication.text = @"No timer selected";
        timersPickerView.hidden = YES;
       //Animation code to dismiss picker should go here
    }
    else if ([[timersArray objectAtIndex:row] isEqual:@"15 seconds"])
    {
        timerIndication.text = @"15 seconds selected";
        timersPickerView.hidden = YES;
       //Animation code to dismiss picker should go here
    }
    else if ([[timersArray objectAtIndex:row] isEqual:@"30 seconds"])
    {
        timerIndication.text = @"30 seconds selected";
        timersPickerView.hidden = YES;
       //Animation code to dismiss picker should go here
    }
    else if ([[timersArray objectAtIndex:row] isEqual:@"60 seconds"])
    {
        timerIndication.text = @"60 seconds selected";
        timersPickerView.hidden = YES;
       //Animation code to dismiss picker should go here
    }
}

#pragma mark - Delay method

// This is where Send button should be enabled
- (IBAction)selectTimer
{
    timersPickerView.hidden = NO;
   //Animation code to present picker view should go here
}
6

5 答え

ボタンを押した後にピッカービューをアニメートするには、次のコードを使用します。

-(IBAction)button:(id)sender
{

   [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.6];
    CGAffineTransform transfrom = CGAffineTransformMakeTranslation(0, 200);
    PickerView.transform = transfrom;
    PickerView.alpha = PickerView.alpha * (-1) + 1;
    [UIView commitAnimations];

}

viewDidLoadメソッドに次のコードを追加することを忘れないでください

PickerView.alpha = 0;    
[self.view addSubview:PickerView];

それは、1回目のクリックでピッカービューが画面の上から落ち、ピッカービューが消えるようにすることです。次のクリックからピッカービューだけが現れ、消えます。助けて、働く:)

10
追加された
素晴らしい答え:)。
追加された 著者 androniennn,
@androniennn嬉しい私の答えが働いて、あなたの補完に感謝:)
追加された 著者 Eshwar Chaitanya,

ビューコントローラーを作成し、コントローラー内にUIPickerViewを追加してから使用することができます。

[self presentModalViewController:viewControllerWithPickerViewアニメーション:はい];

またはあなたのUIPickerViewを追加することはできますが、y値が480.0以上のような画面より大きくてUIViewアニメーションを使用してUIPickerViewをその位置から画面上の位置に移動すると、ModalViewControllerアニメーションをエミュレートします。

5
追加された
ありがとう。代わりに、この回避策を実行します。 ;)
追加された 著者 jaytrixz,
私のmodalviewcontrollerにpickerviewをロードすると、ビューを淡色表示にするための回避策もありますか?
追加された 著者 jaytrixz,
隠されたUIViewを黒の背景とアルファ0.5で使用し、UIPickerViewアニメーションを聞くことができます。終了したら、そのUIViewを表示します。このUIViewはUIPickerView以外のすべての上に配置する必要があります。
追加された 著者 Paul N,

以下の関数を使用して、ピッカービューのアニメーションを実行することができます。

-(void)hideShowPickerView {

if (!isPickerDisplay) {
    [UIView animateWithDuration:0.25 animations:^{
        CGRect temp = self.categoryPicker.frame;
        temp.origin.y = self.view.frame.size.height - self.categoryPicker.frame.size.height;
        self.categoryPicker.frame = temp;
    } completion:^(BOOL finished) {
        NSLog(@"picker displayed");
        isPickerDisplay = YES;
    }];
}else {
    [UIView animateWithDuration:0.25 animations:^{
        CGRect temp = self.categoryPicker.frame;
        temp.origin.y = self.view.frame.size.height;
        self.categoryPicker.frame = temp;
    } completion:^(BOOL finished) {
        NSLog(@"picker hide");
        isPickerDisplay = NO;
    }];
}

}

isPickerDisplayをBOOLとして定義し、これをViewDidLoadに以下のように初期化します。

isPickerDisplay = YES;
[self hideShowPickerView];

これにより、UIPickerViewの非表示と表示の機能が管理されます。

2
追加された

Swift 3ソリューション

私は@EshwarChaitanyaに同意します。アルファプロパティはアニメーション化されており、これは適切な使い方です。

override func viewDidLoad() {
    super.viewDidLoad()

    timersPickerView.alpha = 0
}

@IBAction func selectTimer() {
    UIView.animate(withDuration: 0.3, animations: {
        self.timersPickerView.alpha = 1
    })
}

どのようにあなたがそれを隠したいのか分からないので、私はそれをあなたに任せます。

1
追加された

ボタンを押すと、[self.view addSubVuew:yourPickerView]アクションを実行します。 。それは無駄ですか?

0
追加された
そうではありません。ボタンを押すと、デフォルトではviewDidLoadに隠されているため、PickerViewが表示されます。 PickerViewで行を選択した後、再び非表示になります。
追加された 著者 jaytrixz,