我的目标是为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)
}
答案 0 :(得分:0)
我做了一个测试,我不得不在UITextView
上添加高度和宽度约束,否则它们会崩溃为零大小并且不可见。
还要注意,对于小尺寸,您应该使用较小的非零比例值,例如0.01,而不是0,至少是为了缩小视图。如果您尝试将视图的比例缩放为零,则它会消失而不是缩小。
我还尝试了弹簧阻尼动画,发现使用了usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8
的值时,弹簧效果几乎看不到。如果将阻尼降低到0.5,则弹跳效果会更好,但是在使视图缩小动画时,视图比例会超过0比例,并会稍微上下颠倒。
答案 1 :(得分:0)
我不确定确切的设置,因此请显示情节提要。我没有添加约束,但是在动画之前添加了setNeedsLayout。希望它对您有用。
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)
}
}