ios - 动画按钮位置更改Swift
问题描述
3 个按钮 目前我正在尝试通过点击第三个按钮来更改 2 个按钮的位置。
`@IBAction func addButton(_ sender: UIButton) {
if checked {
UIView.animate(withDuration: 0.3) {
self.taskButton.center = self.addButton.center
self.habitButton.center = self.addButton.center
sender.transform = CGAffineTransform.identity
}
checked = false
} else {
// sender.setImage(#imageLiteral(resourceName: "CancelButton"), for: .normal)
UIView.animate(withDuration: 0.3) {
sender.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 4.0)
self.taskButton.center = self.taskButtonCenter
self.habitButton.center = self.habitButtonCenter
}
checked = true
}
}`
仅当我不使用约束时,此方法才有效。我不知道为什么,但如果我用它在不同的设备上运行,按钮就会移动到一个疯狂的位置。请帮我找到更好的解决方案!谢谢 PS:我是一个初学者,我仍在努力理解约束!
解决方案
约束也可以是出口,如果您使用自动布局,您应该以这种方式将它们用于动画。例如,我假设您使用topMargin
和leftMargin
约束来定位您的按钮。
您用于动画更改的假设代码如下所示:
topMargin.constant += 50
leftMargin.constant += 50
UIView.animate(withDuration: 0.3) {
view.layoutIfNeeded()
}
上面的代码会将这些约束放置的对象向右和向下移动 50 个点(实际上是在任何地方,取决于您放置约束的方式)。
推荐阅读
- android - 即使添加了屏幕方向锁定,Android 屏幕方向
- javascript - 如何在 Typescript 中使用类型化变量作为具有相同名称的类型?
- google-apps-script - 如何使用 Google Apps 脚本中的字符串访问枚举值?
- javascript - 如何检查具有特定键值的对象是否存在
- r - R:缺乏互动性
- android - 将Android项目上传到github时如何忽略资产文件夹?
- php - Laravel 8 渲染belongsToMany 关系
- python - 根据分组数据中的特定条件过滤行 - python
- docker - 其他可能的 Docker 日志位置?
- javascript - React Native,设置所选索引的ID