ios - 如何快速为标签位置设置动画?
问题描述
我只有一个简单的标签:
到目前为止,这是我的代码:
@IBOutlet weak var label: UILabel!
@IBAction func onTap(_ sender: Any) {
}
当我单击 tapGesture 时,我希望标签将其位置动画到屏幕底部,然后当我再次单击时动画到中心。基本上只是切换回来和第四。在我的 Xcode 项目中,我添加了一个上滑菜单,但遇到了一些麻烦,因为我还没有真正用 swift 的界面做任何事情。回答这个问题会让我走上我认为的正确轨道。
解决方案
你可以这样做:
class ViewController: UIViewController {
private let label: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "My Label"
label.font = UIFont.systemFont(ofSize: 24)
return label
}()
private var labelIsDown = false
private var bottomConstraint: NSLayoutConstraint!
private var centerYConstraint: NSLayoutConstraint!
private var centerXConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(label)
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(respondToTap))
label.isUserInteractionEnabled = true
label.addGestureRecognizer(gestureRecognizer)
setupLabelConstraints()
}
private func setupLabelConstraints() {
bottomConstraint = label.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
centerYConstraint = label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
centerXConstraint = label.centerXAnchor.constraint(equalTo: view.centerXAnchor)
centerXConstraint.isActive = true
centerYConstraint.isActive = true
}
@objc private func respondToTap() {
if labelIsDown {
bottomConstraint.isActive = false
centerYConstraint.isActive = true
} else {
centerYConstraint.isActive = false
bottomConstraint.isActive = true
}
UIView.animate(withDuration: 0.5, animations: {
self.view.layoutIfNeeded()
}) { (_) in
self.labelIsDown.toggle()
}
}
}
所以这里的关键是设置约束,然后动画它们的变化......
如果你想为基于故事板的项目获得相同的结果,我假设你必须为你的约束创建出口......
推荐阅读
- angular - 基于最大值和最小值的Ag网格单元线性渐变颜色
- php - 为什么我只能从 php 中省略 echo 的括号?
- node.js - 如何检查 json 文件中是否有内容?
- http - 禁止 nginx 使用 80 端口
- angular - Angular 验证器不会被销毁
- artificial-intelligence - 在 gcloud 中查找机器学习中的主题
- ios - 我们可以将应用外的 iOS 用户重定向到第三方链接吗?
- visual-studio-code - 如何在 Visual Studio Code 中使用两个快捷键编译或运行 c++ 文件?
- c++ - 两个数字之和 == 目标
- javascript - 是否可以返回父元素点击功能的子元素?