UIPickerView анимация глюк - PullRequest
       15

UIPickerView анимация глюк

0 голосов
/ 07 августа 2011

У меня проблема с эффектом, который я пытаюсь реализовать, когда UIPickerView перемещается вверх при нажатии кнопки.

   -(IBAction)slideUp:(id)sender{
if([sender currentTitle] == @"Select"){

[pickerView setFrame: CGRectMake(0, 415.0, 320.0, 216.0)];
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
[pickerView setFrame: CGRectMake(0, 201.0, 320.0, 216.0)];
[UIView commitAnimations];
[slideButton setTitle:@"Done" forState:UIControlStateNormal];

}}

Как видите, кодСначала проверяется, является ли заголовок кнопки «Выбрать» или «Готово», и если она выбрана, она скользит в UIPickerView.Однако каждый раз, когда я создаю приложение, при первом нажатии кнопки UIPickerView сразу появляется в конечной позиции, а затем исчезает из поля зрения.Название кнопки не меняется.После этого начального сбоя он работает нормально.

Если вы знаете, почему это может происходить, или можете придумать, как быстро это исправить, я был бы очень признателен.

1 Ответ

0 голосов
/ 07 августа 2011

Я не уверен, почему вы получаете этот глюк, но есть несколько вещей, которые я бы сделал по-другому в вашем коде. Во-первых, я бы установил начальный кадр представления средства выбора где-то далеко, другим способом (возможно, сразу после его создания). Затем я бы просто ссылался на его начальный кадр перед блоком анимации на новую структуру CGRect, которую я буду анимировать и переназначать. Во-вторых, если вы просто хотите анимировать y-компонент вида средства выбора, я бы также указал это в анимации.

Вот мои изменения в вашем коде:

-(IBAction)slideUp:(id)sender {

if([sender currentTitle] == @"Select") {

CGRect pickerFrame = pickerView.frame;   // You set pickerView.frame in some other method.

[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];

pickerFrame.origin.y = 201.0f;
pickerView.frame = pickerFrame;

[UIView commitAnimations];

[slideButton setTitle:@"Done" forState:UIControlStateNormal];

}

Скажите, если это хорошо.

...