(缩放)在UITextView上变换动画

时间:2018-11-07 23:39:17

标签: ios swift animation uiviewanimation cgaffinetransform

我的目标是为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 :(得分:0)

我做了一个测试,我不得不在UITextView上添加高度和宽度约束,否则它们会崩溃为零大小并且不可见。

还要注意,对于小尺寸,您应该使用较小的非零比例值,例如0.01,而不是0,至少是为了缩小视图。如果您尝试将视图的比例缩放为零,则它会消失而不是缩小。

编辑:

我还尝试了弹簧阻尼动画,发现使用了usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8的值时,弹簧效果几乎看不到。如果将阻尼降低到0.5,则弹跳效果会更好,但是在使视图缩小动画时,视图比例会超过0比例,并会稍微上下颠倒。

答案 1 :(得分:0)

我不确定确切的设置,因此请显示情节提要。我没有添加约束,但是在动画之前添加了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