2014-12-30 3 views
0

У меня есть пользовательский вид в нижней части экрана, я хочу переместить его над клавиатурой, когда она открывается.Цель c, изменить положение над клавиатурой в одной анимации

Я знаю, что я могу зарегистрировать уведомление «KeyboardWasShown», а затем изменить вид или как документация яблока предлагает использовать Scrollview с scrollRectToVisible, но проблема у меня с обеими вариантами является то, что ему не выполняется как часть анимации клавиатуры. Я вижу, что клавиатура появляется, и только через секунду представление перемещается или прокручивается для просмотра.

Еще один вариант, который я попробовал, - установить этот вид как InputAccessory для редактирования textView im. Это работает очень хорошо, но мой взгляд не будет виден после закрытия клавиатуры, и мне нужно, чтобы он был доступен все время.

Я полагаю, что я могу создать два экземпляра этого представления и иметь один как inputAccessory, а другой просто сидеть внизу, но мне действительно не нравится это решение, и эти представления имеют состояние, которое необходимо синхронизировать между двумя экземпляры

Может ли кто-нибудь предложить альтернативное решение?

+0

Вы хотите синхронизировать анимацию и анимацию клавиатуры и анимацию вашего представления? – Ryan

ответ

0

Вы должны использовать уведомление UIKeyboardWillChangeFrameNotification.

Добавить наблюдателя в первую очередь.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil]; 

Селектор будет ...

- (void)keyboardFrameChange:(NSNotification *)notification { 
    CGRect begin  = [[notification.userInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 
    CGRect end   = [[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 
    CGFloat keyboardSize= begin.size.height; 
    BOOL isShowing  = begin.origin.y > end.origin.y; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; 
    [UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    // do view animation here. 

    [UIView commitAnimations]; 
} 

Анимация вашей точки зрения, и клавиатура будет синхронизировать.

+0

Спасибо, отлично работает, Я укажу, что согласно документации на яблоко использование:, beginAnimations, setAnimationDuration, setAnimationCurve, setAnimationBeginsFromCurrentState рассортировано в ios 4 и выше add, вы должны использовать animateKeyframesWithDuration: delay: options: animations: completion : вместо всех – MichaelB