假设我想让一个滚动1000像素的球动画到右边,在这个过程中指定一个计时函数,类似于:
uiview*ball=[[uiview alloc]initwithframe:cgrectmake(0,0,30,30)]
赤霞石化=
[带键路径的cabasicanimation动画:@“transform.translation.x”];
anim.tovalue=[nsnumber numberwithfloat:ball.frame.origin.x+1000.0];
//向右移动1000像素
anim.duration=10.0;
anim.timingfunction=[带控制点的camereditingfunction函数:
0.1:0.0:0.3:1.0];//加速快,减速慢
[ball.layer addAnimation:anim forkey:@“MyMoveRightAnim”];
< /代码>
我最终想要的是有一个方法,比如说动画进程回调:(float)progress,be called during the animation,in regular intervals of the animation's progressin terms of the absolute“Distance”between start and end values,i.e.Ignoring the timing function.
我将用上面的例子解释一下,球向右滚动1000px(用y轴表示,在我们的例子中100%=1000px):。

我希望在球进展250像素时调用回调方法。由于定时功能,头250个像素可能在ti02秒时达到,达到总距离的一半仅为ti10.7秒后(快速加速开始),750像素标记另一个ti21.1秒后,并且需要剩余的ti35.2秒以达到100%(1000像素)标记。
什么会很好,但没有提供:
如果动画在动画进度间隔中调用了委托方法,那么我不需要问这个问题。
想法如何解决问题:
我能想到的一个解决方案是计算贝塞尔曲线的值,将其映射到tikvalues(我们知道总动画持续时间),并且当动画开始时,我们依次执行我们的animationProgresssBack:.selector with these delays manually.
显然,这是疯狂的(手动计算贝塞尔曲线??)更重要的是,不可靠(我们不能依赖动画线程和主线程同步,还是可以?)
有什么想法吗?
期待您的想法!
UIView *ball = [[UIView alloc] initWithFrame:CGRectMake(0,0,30,30)];
CABasicAnimation* anim =
[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
anim.toValue = [NSNumber numberWithFloat:ball.frame.origin.x + 1000.0];
// move 1000 pixels to the right
anim.duration = 10.0;
anim.timingFunction = [CAMediaTimingFunction functionWithControlPoints:
0.1 :0.0 :0.3 :1.0]; // accelerate fast, decelerate slowly
[ball.layer addAnimation:anim forKey:@"myMoveRightAnim"];
我最终想要的就是要有一个方法,比如说-(void)animationProgressCallback:(float)progress
在动画过程中,以动画进程的定期间隔调用从开始值和结束值之间的绝对“距离”来看,即忽略定时功能。
我将用上面的例子解释一下,球向右滚动1000px(用y轴表示,在我们的例子中100%=1000px):

我希望在球进展250像素时调用回调方法。由于定时功能,在TI中可能会达到前250个像素。零=2秒,总距离的一半仅为ti一=0.7秒后(快速加速开始),750像素标记另一个ti二=1.1秒后,需要剩余的ti三=5.2秒,达到100%(1000px)标记。
什么是最好的,但没有提供:
如果动画在动画进度间隔中调用了委托方法,那么我不需要问这个问题-)
如何解决问题的想法:
我能想到的一个解决方案是计算贝塞尔曲线的值,将其映射到tiK值(我们知道总动画持续时间),当动画开始时,我们依次执行animationProgresssCallback:
手动延迟的选择器。
显然,这是疯狂的(手动计算贝塞尔曲线??)更重要的是,不可靠(我们不能依赖动画线程和主线程同步,还是可以?).
有什么想法吗??
期待您的想法!