Как я могу анимировать отображение UIPickerView после нажатия кнопки? - PullRequest
7 голосов
/ 28 октября 2011

Я хочу анимировать свой UIPickerView после нажатия кнопки. Я уже кодировал свой UIPickerView, чтобы он был скрыт в viewDidLoad и не был скрыт после нажатия кнопки, но он не анимируется так, как анимация ModalViewController по умолчанию. Я просто хочу, чтобы мой UIPickerView был анимирован так же, как по умолчанию анимация ModalViewController.

Я исследовал уже на сайте и в Интернете, но я не могу сделать это правильно.

Вот мой код:

#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
}

Ответы [ 5 ]

10 голосов
/ 26 декабря 2011

Вы можете использовать следующий код для анимации представления средства выбора после нажатия кнопки:

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

То, что он делает, это заставляет представление выбора падать с вершины экрана при первом щелчке и, чтобы заставить представление выбора исчезать, вы можете просто нажать кнопку еще раз. От следующего щелчка представление выбора просто появляется и исчезает .. Надеюсьпомогает и работает:)

5 голосов
/ 28 октября 2011

Вы можете создать viewcontroller, а затем добавить UIPickerView внутри контроллера и затем использовать:

[self presentModalViewController: viewControllerWithPickerView animated: YES];

или вы можете добавить свой UIPickerView не скрытымно со значением y, большим, чем экран, например 480.0 или больше, и затем с помощью анимаций UIView, чтобы переместить UIPickerView из этой позиции в позицию, видимую на экране, которая будет эмулировать анимацию ModalViewController.

2 голосов
/ 23 апреля 2013

Вы можете использовать нижеприведенную функцию для анимации вида сборщика.

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

1 голос
/ 02 марта 2017

Решение Swift 3

Я согласен с @EshwarChaitanya, свойство alpha является анимируемым, и это правильное использование.Я оставлю это на ваше усмотрение.

0 голосов
/ 28 октября 2011

Когда вы нажимаете кнопку, выполните действие [self.view addSubVuew: yourPickerView]; , Это без работы?

...