2016-08-18 2 views
1

хорошо, так что этот вопрос похож на this один, но я последовал за ответом на этот вопрос, но я не работал, так что дело в том, что у меня есть текстовое поле в моем просматривать и я хочу, чтобы переместить его вверх, когда клавиатура появляется это мой код:Анимация не является гладкой при первом запуске (когда появляется клавиатура)

Уведомления наблюдатель состояния клавиатуры

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LaunchScreenViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil) 

функция для получения высоты-клавиатур

func keyboardWillShow(notification:NSNotification) { 
    let userInfo:NSDictionary = notification.userInfo! 
    duration = (notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double) 
    let keyboardFrame:NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue 
    let keyboardRectangle = keyboardFrame.CGRectValue() 

    keyboardHeight = keyboardRectangle.height 

} 

моей анимация

func textFieldDidBeginEditing(textField: UITextField) { 

    self.nextButtonConstraint.constant = keyboardHeight 
    UIView.animateWithDuration(duration) { 
     self.nextButton.layoutIfNeeded() 
     self.emailTextField.layoutIfNeeded() 

    } 

} 

, как вы можете видеть, что моя анимация на textFieldDidBeginEditing, потому что в соответствии с аналогичной question' сек ответа положить его там будет решить эту проблему, но до сих пор при первом запуске (когда клавиатура появляется в первый раз) моя анимация не является гладкой

+0

Этот код находится в подклассе 'UIViewController'? Попробуйте вызвать 'self.view.layoutIfNeeded' вместо того, чтобы называть его' nextButton' и 'emailTextField'. – Connor

+0

@ConnorNeville, спасибо за ответного человека, да, они находятся внутри класса «UIViewController», и я устал, ваше предложение все еще не изменилось. –

+0

Хмм. Попробуйте добавить еще один наблюдатель NSNotificationCenter' для 'keyboardDidShow' и разместите свою анимацию там. – Connor

ответ

0

Я думаю, что решение может быть довольно простым. Попробуйте поставить все, что вам код внутри этого:

DispatchQueue.main.async{ 
    // Your Code here 
    } 

Это перемещает анимацию в основной поток, который должен ускорить его и избежать негладкой анимации.

Смежные вопросы