swift - 扩展中的 Swift 动画约束
问题描述
下面是我用来移动和缩小标签的代码。在我把它变成一个扩展之前它工作得很好。现在属性动画但不是约束。我已经多次看到同样的问题被问过,但解决方案似乎都很简单,而且没有一个有效。我已经尝试将约束常量以及layoutIfNeeded
() 移动到动画上方、alpha 设置下方、上方和下方……没有运气。
extension UIView {
func moveLabel(lc: NSLayoutConstraint, hc: NSLayoutConstraint) {
lc.constant = -1
hc.constant = 24
UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseInOut], animations: {
self.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
self.alpha = 0.5
self.layoutIfNeeded()
}, completion: nil)
}
}
解决方案
因为你说“我用来移动和缩小标签”我怀疑你的问题是因为你调用self.layoutIfNeeded()
标签本身,这将更新当前视图范围内的约束,但移动视图需要超级视图布置。作为测试,您也可以将其包含self.superview?.layoutIfNeeded()
在动画块中,但如果您想确定,请将标签的超级视图传递给该函数并调用layoutIfNeeded()
它。
extension UIView {
func moveLabel(lc: NSLayoutConstraint, hc: NSLayoutConstraint, superView: UIView) {
lc.constant = -1
hc.constant = 24
UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseInOut], animations: {
self.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
self.alpha = 0.5
self.layoutIfNeeded()
superView.layoutIfNeeded()
}, completion: nil)
}
}
ps 在您的代码中,您实际上并没有为约束设置动画,这是您的意图吗?
推荐阅读
- ruby-on-rails - 具有 SEO 要求的 Rails 本地化
- sql - 如果我有一个简单的一对多关系,我如何构建那个特定的 SQL 语句
- excel - VBA:文件日期时间、夏令时和 SOX 合规性
- c++ - 通过引用返回静态向量很慢
- python-3.x - 添加时图像重叠
- python - 如何使用共享内存而不是通过多个进程之间的酸洗来传递对象
- git - Git commit commits staged and unstaged file
- reactjs - react-modal:如何关闭一个模式并同时打开一个新模式?
- google-cloud-platform - 使用服务帐号更新团队云端硬盘权限
- php - azure web app fopen('test.csv') 保存在哪里?