我想要一个相当于UIViewAnimationCurveEaseInOut的缓动函数,但没有看到Apple公开这个功能。我试过the easeInOutQuad function posted here没有成功。我该功能的Objective-C的版本是:轻松缓出功能
-(float) getEaseInOutValueWithElapsedMillis: (float) t startValue: (float) b endValue: (float) c andTotalMillis: (float) d {
float value =0.0f;
if ((t/=d/2.0f) <1.0f)
value =c/2.0f*t*t + b;
else
value =-c/2.0f * ((--t)*(t-2.0f) - 1.0f) + b;
debug(@"t=%f b=%f c=%f d=%f value=%f", t, b, c, d, value);
return value;
}
和登录的结果是:
当开始值小于终值:
t=0.066467 b=110.000000 c=225.000000 d=500.000000 value=110.497017
t=0.133133 b=110.000000 c=225.000000 d=500.000000 value=111.993996
t=0.199799 b=110.000000 c=225.000000 d=500.000000 value=114.490944
...
t=0.999786 b=110.000000 c=225.000000 d=500.000000 value=222.451935
t=0.066452 b=110.000000 c=225.000000 d=500.000000 value=236.954926
t=0.133118 b=110.000000 c=225.000000 d=500.000000 value=250.457932
... (note that value shot right past c)
t=0.866440 b=110.000000 c=225.000000 d=500.000000 value=332.993195
t=0.933105 b=110.000000 c=225.000000 d=500.000000 value=334.496582
t=0.999771 b=110.000000 c=225.000000 d=500.000000 value=335.000000
而且100%的值最终为b + c,而不是c。
当开始值大于结束值时:
t=0.047389 b=225.000000 c=110.000000 d=700.000000 value=225.123520
t=0.095008 b=225.000000 c=110.000000 d=700.000000 value=225.496460
...
t=0.904504 b=225.000000 c=110.000000 d=700.000000 value=334.498413
t=0.952122 b=225.000000 c=110.000000 d=700.000000 value=334.873932
t=0.999740 b=225.000000 c=110.000000 d=700.000000 value=335.000000
再次,100%值最终成为B + C,而不是C。
也许我已经破坏了代码。我怎样才能实现舒适的缓解?
JavaScript与C具有相同的运算符优先级吗?我首先将这些计算中的一部分解压缩到中间值并在其周围洒一些括号。如果((t/= d/2))'只是毛。 –
好的建议。我不知道这两种语言的运算符优先级是否相同。根据记录的输出结果看来,t似乎是正确的。 – user371320
有趣的事实。 ECMAScript语言规范似乎没有提及运营商的优先级。 – user371320