Прежде всего, спасибо @gmogames, что нашли время, чтобы предложить свои предложения. Всегда полезно иметь возможность обмениваться идеями !!!
Проблема действительно имела отношение к сбросу точки привязки (или центра) представления перед применением нового преобразования, чтобы анимация работала правильно. Поэтому, используя гораздо более простой пример масштабирования вида после его перемещения , вот как выглядит новый метод:
extension UIView {
func scaleView(scaleFactor: CGPoint, duration: TimeInterval) {
// store the view original center
let oCenter = self.center
// get the current transformation
let cTransform = self.transform
// set the new center of the view
self.center = CGPoint(x: self.frame.midX, y: self.frame.midY)
// clears the transform matrix from potential prior translation
// Note that you need to take into account potential prior scale of the view into the translation vector!!
self.transform = self.transform.translatedBy(x: -cTransform.tx / cTransform.a, y: -cTransform.ty / cTransform.d)
// Animates the transformation
let animator = UIViewPropertyAnimator(duration: duration, timingParameters: UICubicTimingParameters(controlPoint1: CGPoint(x: 0, y: 0), controlPoint2: CGPoint(x: 1, y: 1))
animator.addAnimations {
self.transform = self.transform.scaledBy(x: scaleFactor.x, y: scaleFactor.y)
}
// resets the View to its original center and apply the transformation so that the view stays in the right end position
animator.addCompletion { (position) in
if position == UIViewAnimatingPosition.end {
self.center = oCenter
self.transform = cTransform.scaledBy(x: scaleFactor.x, y: scaleFactor.y)
}
}
animator.startAnimation()
}
}
Вот результат анимации: move + шкала + шкала + вернуться к оригиналу
Один из способов сделать это - установить объект в качестве делегата для текстового поля и реализовать
- (BOOL)textFieldShouldReturn:(UITextField *)textField
, в котором вы вызываете [textField resignFirstResponder]
Это вызовет клавиатура пропадает, когда они нажимают кнопку возврата / перехода / готово (независимо от того, какой вы установили нижнюю правую клавишу клавиатуры).
Для получения дополнительной информации см. ссылку UITextFieldDelegate .
- (BOOL) textFieldShouldReturn: (UITextField *) textField
в вашем делегате вызывается при нажатии кнопки возврата.
Вы хотите вызвать [textField resignFirstResponder]
и затем верните ДА
. Это должно делать свое дело. Также убедитесь, что делегат установлен. Если есть сомнения, добавьте точку останова или NSLog
и проверьте.