(Масштаб) Преобразование анимации в UITextView - PullRequest
0 голосов
/ 08 ноября 2018

Моя цель состоит в том, чтобы создать анимацию «всплывающих окон» для UITextView, который вкладывается в карту UIView, представленную модально.

Пока карта появляется, UITextView не похоже ... Есть ли какое-то решение для этого? Ниже приведен код, который я пробовал до сих пор ...

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    DispatchQueue.main.async {
        UIView.animate(withDuration: 1, delay: 0.1, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8, options: .curveEaseOut, animations: {
            self.cardView.transform = CGAffineTransform(scaleX: 1, y: 1)              
            self.messageTextView.transform = CGAffineTransform(scaleX: 1, y: 1)  
        }, completion: nil)            
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    cardView.transform = CGAffineTransform(scaleX: 0, y: 0)
    messageTextView.transform = CGAffineTransform(scaleX: 0, y: 0)
}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я не уверен в точной настройке, поэтому покажите раскадровку. Я не добавил ограничение, но установил setNeedsLayout перед анимацией. Надеюсь, это работает для вас.

enter image description here

          override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        DispatchQueue.main.async {
            self.messageTextView.setNeedsLayout()
            UIView.animate(withDuration: 1, delay: 0.1, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8, options: .curveEaseOut, animations: {
                self.cardView.transform = CGAffineTransform(scaleX: 1, y: 1)
                self.messageTextView.transform = CGAffineTransform(scaleX: 1, y: 1)
            }, completion: nil)
        }
    }

enter image description here

0 голосов
/ 08 ноября 2018

Я сделал тест, и мне пришлось добавить ограничения по высоте и ширине к моим UITextView s, или они свернуты до нулевого размера и не видны.

Также обратите внимание, что вы должны использовать небольшое ненулевое значение шкалы, например, 0,01 для вашего небольшого размера, а не 0, по крайней мере, для уменьшения вида. Если вы попытаетесь анимировать масштаб представления до нуля, он исчезает, а не сжимается.

Edit:

Я также попробовал вашу анимацию с демпфированием пружины и обнаружил, что при значениях usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8, которые вы используете, эффект пружины едва заметен. Если я наберу демпфирование до 0,5, эффект отскока будет лучше, но когда анимация вида сжимается, масштаб вида выходит за масштаб 0 и слегка увеличивается вверх ногами.

...