UITextView 上的(缩放)变换动画
(Scale) Transform Animation on UITextView
我的目标是为 UITextView
创建一个 "bubble-up" 动画,该动画嵌套在模态呈现的 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)
}
我做了一个测试,我不得不为我的 UITextView
添加高度和宽度限制,否则它们会折叠成零尺寸并且不可见。
另请注意,您应该使用较小的非零比例值(例如 0.01)来表示较小的尺寸,而不是 0,至少对于缩小视图而言。如果您尝试将视图的比例动画化为零,它会消失而不是缩小。
编辑:
我还尝试了您的 spring 阻尼动画,发现使用您使用的 usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8
值时,spring 效果几乎不可察觉。如果我将阻尼调低到 0.5,弹跳效果会更好,但是当为视图缩小设置动画时,视图比例超过 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)
}
}
我的目标是为 UITextView
创建一个 "bubble-up" 动画,该动画嵌套在模态呈现的 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)
}
我做了一个测试,我不得不为我的 UITextView
添加高度和宽度限制,否则它们会折叠成零尺寸并且不可见。
另请注意,您应该使用较小的非零比例值(例如 0.01)来表示较小的尺寸,而不是 0,至少对于缩小视图而言。如果您尝试将视图的比例动画化为零,它会消失而不是缩小。
编辑:
我还尝试了您的 spring 阻尼动画,发现使用您使用的 usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8
值时,spring 效果几乎不可察觉。如果我将阻尼调低到 0.5,弹跳效果会更好,但是当为视图缩小设置动画时,视图比例超过 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)
}
}