2011-10-28 113 views
6

我想在按下按鈕後爲我的UIPickerView設置動畫。我已經將我的UIPickerView編碼爲隱藏在viewDidLoad上,並且在按下按鈕後不會隱藏,但它不像默認情況下ModalViewController動畫一樣動畫。我只是想讓我的UIPickerView像默認的ModalViewController一樣動畫化。按下按鈕後,如何在顯示UIPickerView後動畫顯示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 
} 

回答

10

您可以使用下面的代碼按下按鈕後的動畫選擇器視圖:

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

很好的回答:)。 – androniennn

+0

@androniennn很高興我的答案工作,並感謝您的補充:) –

5

您可以創建一個視圖控制器,然後添加UIPickerView控制器中,然後使用:

[自我presentModalViewController:viewControllerWithPickerView動畫:YES];

或者你可以添加你的UIPickerView而不是隱藏的,但是它的值比480.0或更大的屏幕更大,然後使用UIView動畫將UIPickerView從該位置移動到屏幕上可見的位置,這將模擬ModalViewController動畫。

+0

謝謝。將只是做這個解決方法。 ;) – jaytrixz

+0

任何解決方法也使視圖變暗時,我加載我的modalviewcontroller與pickerview在其中? – jaytrixz

+0

您可以使用隱藏的UIView背景爲黑色,alpha值爲0。5並聽取您的UIPickerView動畫,當它完成後,您將顯示該UIView。這個UIView應該被放置在除了UIPickerView以外的所有其他地方。 –

0

當您按下按鈕時,請執行[self.view addSubVuew:yourPickerView]; 。這是無效的嗎?

+0

情況並非如此。當我按下按鈕時,它只是讓PickerView出現,因爲它在viewDidLoad中默認隱藏。在PickerView上選擇一行後,它再次隱藏。 – jaytrixz

2

您可以使用以下功能執行選取器視圖的動畫。

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

夫特3溶液

我同意@EshwarChaitanya,alpha屬性是動畫的,這是一個適當的使用。

override func viewDidLoad() { 
    super.viewDidLoad() 

    timersPickerView.alpha = 0 
} 

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

我不知道如何隱藏它,所以我會留給你。