swift - for(增加时间延迟)取决于对象数量

标签 swift math time formula

一道数学题。我正在尝试按顺序为对象设置动画,但我想不出可以让我顺利设置延迟的公式。比方说,如果我的数组中有 2 个对象,我希望它们几乎正常地以 i*0.25 延迟设置动画,但是如果我有 25 个对象,我希望它们能够相当快地设置动画。是的,我可以尝试设置手动比率切换 .count,但我认为应该有一个很好的公式吗?

for (i,object) in objects.enumerated() {
    object.animate(withDelay: (i * 0.25) / objects.count)
}

最佳答案

你最好的选择是选择一个每次都会发生的动画时间,无论变量的数量是多少。

let animateTime = 2 // 2 secs
let animateTimePerObject:Double = animateTime/objects.count
for (i,object) in objects.enumerated() {
    object.animate(withDelay: (i * animateTimePerObject) 
}

假设有 10 个对象,您想要动画 2 秒。这将设置 animateTimePerObject = 2/10 = .2 每个项目将延迟 i(无论它们位于什么位置)* 每个对象的动画时间。所以按顺序,0, 0.2, 0.4, 0.6, 0.8, 0.1, 0.12, 0.14, 0.16, 0.18, 0.2

同样可以用 2 个对象来完成。

或者您可以执行一个log 函数,该函数允许增长但速度较慢。这里有一些 functions你可以考虑使用。

添加此函数以创建自定义日志功能

func logC(val: Double, forBase base: Double) -> Double {
    return log(val)/log(base)
}

for (i,object) in objects.enumerated() {
    let delay = i == 0 ? .25 : logC(Double(i)*10, forBase: 10) * 0.25
    object.animate(withDelay: delay)
}

This will slow down your 0.25*i rate to a much slower one.

0 -> .25
1 -> Log(20, base: 10) = 1.3 * 0.25 = .325
...
25 -> Log(250, base: 10) = 2.3979 * 0.25 = .6 

它应该在哪里

0 -> .25
1 -> .25 * 2 = .5
25 -> .25 * 25 = 6.25

您可以随意使用日志功能,但这只是一些想法。您正在寻找哪种算法并不准确。

注意: 可能存在语法问题,DoubleInt 但您可以调整! :)

比较 Log 和 Sqrt:

func logC(val: Double, forBase base: Double) -> Double {
    return log(val)/log(base)
}

for i in 0..<25 {
    let delay = i == 0 ? 0.25 : pow(logC(val: Double(i)*10, forBase: 10) * 0.25, log(1/Double(i))) * 0.45
    let delay2 = i == 0 ? 0.25 : sqrt(Double(i)) * 0.5
    print(delay, delay2)
}

0.25 0.25
0.45 0.5
0.9801911408397829 0.7071067811865476
1.3443747821649137 0.8660254037844386
1.5999258430124579 1.0
1.7853405889097305 1.118033988749895
1.9234257236285595 1.224744871391589
2.0282300761096543 1.3228756555322954
2.1088308307833894 1.4142135623730951
2.1713433790123178 1.5
2.2200343505615683 1.5811388300841898
2.2579686175608598 1.6583123951777
2.2874024254699274 1.7320508075688772
2.3100316733059247 1.8027756377319946
2.32715403828525 1.8708286933869707
2.33977794890637 1.9364916731037085
2.348697701417663 2.0
2.3545463958925756 2.0615528128088303
2.357833976756366 2.1213203435596424
2.358975047645847 2.179449471770337
2.35830952737025 2.23606797749979
2.3561182050020992 2.29128784747792
2.35263460234384 2.345207879911715
2.348054124507179 2.3979157616563596
2.3425411926260447 2.449489742783178

关于swift - for(增加时间延迟)取决于对象数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269682/

相关文章:

ios - LMColumnView 和 LMRowView 始终保持左右间距

c++ - 在 C++ 中进行快速除法的好方法?

math - 快速放大三角形的方法

c++ - 如何在C++中计算到下一个星期六的秒数?

swift - 手动添加框架后缺少所需模块

swift - 为什么这不改变标签的颜色?

c# - 通过算法从用户 ID 生成唯一的随机好友代码

java - 如何在 Java 中将时间值转换为 YYYY-MM-DD 格式?

php - 从表中选择时间戳在 x 秒内的数据

ios - WKUserScript Init 导致 EXC_BAD_ACCESS