ios - 如何在不依赖大量约束引用和样板代码的情况下使用自动布局为 View 定义动画?

标签 ios swift animation uiview autolayout

在切换到自动布局之前,将动画应用于 View 很容易 - 您只需更改 UIView.layoutWithDuration: 中的框架。当约束出现时,事情变得更加复杂。为使用自动布局的 View 设置动画的最常见方法是保留对要更改的约束的引用,然后设置常量值,但这很难设计,并且如果它们的其他 View 可能会受到影响约束取决于您要设置动画的 View 的位置。

一定有更好的方法来做到这一点。我希望能够执行类似 view.translateFrom(direction: .left, distance: 30, duration: 0.3, delay: 0) 的操作。

最佳答案

最终您会希望使用约束来实现简单的动画。最重要的原因是 -

选择任何其他方式都是逆流而上

如果您不想使用@IBOutlets 为您想要设置动画的约束“乱扔垃圾”,那么在大多数情况下,您可以在代码中获取对相关约束的引用:

方便的扩展

import UIKit

extension UIView {
  func constraint(attribute: NSLayoutAttribute) -> NSLayoutConstraint? {
    var constraint : NSLayoutConstraint? = .none

    for potentialCenterXConstraint in self.constraints {
      if potentialCenterXConstraint.firstAttribute == attribute {
        constraint = potentialCenterXConstraint
        break
      }
    }

    return constraint
  }
}

客户端代码使用

if let centerXConstraint = someView.constraint(attribute: .centerX) {

  // Do something funky with centerXConstraint
}

关于ios - 如何在不依赖大量约束引用和样板代码的情况下使用自动布局为 View 定义动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39243760/

相关文章:

ios - 应用在 UIButtonLabel defaultAttributes 上崩溃

ios - UITableView 奇怪的 reloadData 问题

json - swift ,错误: ambiguous use of subscript

swift - 只能从它所属的 Realm 中删除一个对象

javascript - 暂停事件监听器

ios - 仅允许访问 HTML5 中的相机设备

ios - 如何从 Xcode 中导入的 .dae 混合器访问混合形状

WPF 动画窗口可见性更改

android - 多个动画同时运行时动画断断续续

ios - 在 tableView 中使用来自不同 tableViewCell 的 segue 推送到不同的 viewController 可以在 Storyboard 中实现