使用DDHTweaks查找理想值

有时,您可能希望在野外测试时可以调整应用程序的某些值(颜色,字体大小,文本)。 或者,您想启用一项功能来对其进行测试,但还不希望向Beta测试人员展示该功能。

使用我的DDHTweaks框架,您可以做到这一点。 您只需要添加一些代码即可在应用运行时更改某些值。 这是一个简单的例子。 假设您有一个登录屏幕,并且想在显示该屏幕时为文本字段和按钮的外观设置动画。 如果您以前做过,您可能还记得为动画找到正确的值会花费一些时间,因为您必须在每次更改后进行构建和运行。 有些人甚至开始在Playgrounds中调整动画,因为它在模拟器上的测试速度更快。

使用DDHTweaks,您可以更快地找到正确的值。

注意:在此示例中,我将使用情节提要,因为这是大多数人构建其应用程序的方式。 通常我不使用情节提要。 😉

我们要设置动画的屏幕如下所示:

元素的布局是使用“自动布局”完成的。 因此,为了使外观具有动画效果,我们需要引用所有布局约束:

  @IBOutlet弱var labelTopConstraint:NSLayoutConstraint! 
@IBOutlet弱var labelUsernameConstraint:NSLayoutConstraint!
@IBOutlet弱var usernamePasswordConstraint:NSLayoutConstraint!
@IBOutlet弱var passwordButtonConstraint:NSLayoutConstraint!

这些约束中的每一个都定义了到布局中下一个元素的垂直距离。 为这些元素的外观设置动画的一种方法如下所示:

override func viewWillAppear (_ animated: Bool ) { 
super.viewWillAppear (animated)

labelTopConstraint . constant = - 40
labelUsernameConstraint . constant = - 40
usernamePasswordConstraint . constant = - 40
passwordButtonConstraint . constant = - 40
}

override func viewDidAppear (_ animated: Bool ) {
super.viewDidAppear (animated)

let duration = 0.5
let delay = 0.1
let damping = CGFloat (0.6)
let springVelocity = CGFloat (0.0)

labelTopConstraint . constant = 30
UIView.animate (withDuration: duration,
delay: 0.0,
usingSpringWithDamping: damping,
initialSpringVelocity: springVelocity,
options: [],
animations: {

self. view .layoutIfNeeded ()
}, completion: nil )

labelUsernameConstraint . constant = 8
UIView.animate (withDuration: duration,
delay: delay,
usingSpringWithDamping: damping,
initialSpringVelocity: springVelocity,
options: [],
animations: {

self. view .layoutIfNeeded ()
}, completion: nil )

usernamePasswordConstraint . constant = 8
UIView.animate (withDuration: duration,
delay: delay * 2,
usingSpringWithDamping: damping,
initialSpringVelocity: springVelocity,
options: [],
animations: {

self. view .layoutIfNeeded ()
}, completion: nil )

passwordButtonConstraint . constant = 8
UIView.animate (withDuration: duration,
delay: delay * 3,
usingSpringWithDamping: damping,
initialSpringVelocity: springVelocity,
options: [],
animations: {

self. view .layoutIfNeeded ()
}, completion: nil )
}

viewWillAppear我们设置约束的常量,以使所有元素均不在屏幕上。 在viewDidAppear我们将常量设置为最终值,并告诉布局引擎我们希望对更改进行动画处理。 除延迟外,这四个动画的值相同。 每个动画都比上一个动画稍晚开始。

现在,我们添加一些调整以微调动画值。 为了能够使用DDHTweaks,我们需要将框架添加到项目中(例如使用Carthage),并将其导入文件中。 然后,我们只需要用以下内容替换动画值的分配:

 let duration = 0.5 .tweak ("Animation/Duration", min: 0, max: 5) 
let delay = 0.1 .tweak ("Animation/Delay", min: 0, max: 1)
let damping = CGFloat (0.6 .tweak ("Animation/Damping", min: 0, max: 1))
let springVelocity = CGFloat (0.0 .tweak ("Animation/Spring Velocity", min: 0, max: 10))

我们还没有完成。 我们需要一种显示DDHTweaks-UI的方法。 将DDHTweaks导入AppDelegate.swift并替换该行

 var window: UIWindow ? 

有了这个

  var window:UIWindow?  = ShakeableWindow(框架:UIScreen.main.bounds) 

进行此更改后,您可以通过摇动iDevice或在模拟器中选择“ Hardware / Shake Gesture ,将DDHTweaks-UI显示在屏幕上。 在演示应用程序中,有两个带有可调整值的屏幕。

当选择登录屏幕时,我们将获得所有可以更改的动画值。 经过几次迭代,我们最终找出了最佳值:

找到登录动画的理想值之后,我们可以通过发送邮件将其导出到DDHTweaks-UI的主屏幕上。

如果您需要更多信息,请转到git存储库并阅读自述文件或代码。 让我知道您对Twitter的看法。

如果您喜欢这篇文章,请在http://swiftandpainless.com/上查看我的博客,并在Twitter上关注我。