2016-09-15 5 views
0

Мой проект очень прост, просто чтобы объяснить мой вопрос. В представлении контроллера вида есть UITextField и UILabel. Если я коснулся этикетки, метка повернет M_PI, а текстовое поле сменит первого ответчика. Если текстовое поле не становится первым ответчиком, метка вращается, как ожидалось. Но если текстовое поле становится первым ответчиком и появляется клавиатура. Когда метка постучана, она переходит в конец преобразования без анимации.Отключить клавиатуру при другом режиме анимации

Я написал этот код в Xcode8, быстрый 3,0

Код:

class ViewController: UIViewController, UITextFieldDelegate { 
@IBOutlet weak var textField: UITextField! 

@IBOutlet weak var label: UILabel! 

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 
    UIView.animate(withDuration: 0.25) { 
     self.label.transform = .identity 
    } 

    return true 
} 

@IBAction func labelTapped(_ sender: AnyObject) { 
    textField.resignFirstResponder() 
    UIView.animate(withDuration: 0.25) { 
     self.label.transform = self.label.transform.rotated(by: CGFloat(M_PI)) 
    } 
} 
} 
+0

вы можете попробовать поставить 'resignFirstResponder()' на блоке 'UIView.animate' завершения – Tj3n

+0

Может клавиатура анимация и моя анимация делают одновременно? – leizh00701

+0

Затем вы можете наблюдать 'UIKeyboardWillHideNotification' и добавлять анимацию туда – Tj3n

ответ

0

Попробуйте выполнять анимацию с задержкой около 0,5 секунды после того, как текстовое поле уходит в отставку первый ответчик.

func animate() -> Void { 
    UIView.animate(withDuration: 0.25) { 
     self.label.transform = self.label.transform.rotated(by: CGFloat(M_PI)) 
    } 
} 

@IBAction func labelTapped(_ sender: AnyObject) { 
    textField.resignFirstResponder() 
    NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(ViewController.animate), userInfo: nil, repeats: false) 
} 
Смежные вопросы