Я хочу, чтобы функция ослабления была эквивалентна UIViewAnimationCurveEaseInOut, но не вижу, что Apple раскрывает это как функцию.Функция Ease-In Ease-Out
Я пробовал 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% заканчивается как Ь + с, а не с.
Возможно, я исказил код. Как я могу достичь надлежащей легкости в облегчении?
Есть ли у JavaScript одинаковый приоритет оператора как C? Я начну с распаковки некоторых из этих вычислений в промежуточные значения и покроя некоторые круглые скобки вокруг. 'if ((t/= d/2))' просто грубо. –
Хорошее предложение. Я не знаю, является ли приоритет операторов одинаковым для двух языков.Как бы то ни было, согласно зарегистрированному результату, t кажется правильным. – user371320
Интересный факт. Спецификация языка ECMAScript, похоже, не упоминает приоритет оператора. – user371320