- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我想要制作一个向右滚动 1000 像素的球的动画,并在此过程中指定一个计时函数 - 如下所示:
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
,在动画期间定期调用动画的进度以开始值和结束值之间的绝对“距离”表示,即忽略计时函数。
我将尝试用上面的例子来解释,球向右滚动 1000 像素(以 y 轴绘制,在我们的例子中为 100%=1000 像素):
我希望每当球前进 250 像素时就调用我的回调方法。由于计时功能,前 250 个像素可能会在 ti0=2 秒内到达,总距离的一半在 ti1= 0.7 秒后到达(快速加速踢) in),750px 标记又过了 ti2= 1.1 秒,并且需要剩余 ti3= 5.2 秒才能达到 100% (1000px) 标记。
什么会很棒,但没有提供:
如果动画按照描述在动画进度间隔中调用委托(delegate)方法,我就不需要问这个问题......;-)
解决问题的想法:
我能想到的一个解决方案是计算贝塞尔曲线的值,将其映射到 tik 值(我们知道总动画持续时间),当动画开始时,我们依次执行我们的 animationProgresssCallback:
选择器手动处理这些延迟。
显然,这是疯狂的(手动计算贝塞尔曲线??),更重要的是,不可靠(我们不能依赖动画线程和主线程同步 - 或者我们可以吗?)。
有什么想法吗?
期待您的想法!
最佳答案
Ideas how to solve the problem:
One solution I can think of is to calculate the bezier curve's values, map that to the tik values (we know the total animation duration), and when the animation is started, we sequentially perform our animationProgresssCallback: selector with those delays manually.
Obviously, this is insane (calculating bezier curves manually??) and, more importantly, unreliable (we can't rely on the animation thread and the main thread to be in sync – or can we?).
其实这个是靠谱的。 CoreAnimation 是基于时间的,因此您可以使用委托(delegate)在动画真正开始时收到通知。关于计算贝塞尔曲线路径......我们这样看:如果你想在 OpenGLES 中实现一个表面,你必须计算三次贝塞尔曲线,情况可能会更糟!哈哈。你的情况只是一维,如果你懂数学的话,这并不难。
关于cocoa - CAAnimation 在周期性动画进度间隔中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3257204/
我已经完成了创建和启动计时器的手册页。 http://man7.org/linux/man-pages/man2/timerfd_create.2.html 但是,除了 arm(start) 和 di
我正在用 opengl 编写新的代码库,很早就遇到了一个奇怪的错误。这是帧速率的明显波动,具有重复性和可预测性。 我知道它肯定与渲染的对象成正比。它也与屏幕大小成正比(不是视口(viewport)大小
我知道如何使用计算数组中点之间的欧几里得距离 scipy.spatial.distance.cdist 类似于这个问题的答案: Calculate Distances Between One Poin
我想使用 CGAL 构造周期性 3D Delaunay 三角剖分和信息(在本例中为整数)。对于 2D,如果我构造一个 vector 对(点,信息)并将其传递给三角测量函数,则效果很好。然而,非常类似的
每隔几天,我们就会收到少量 MySql 超时错误,这些错误与我们的 MySQL RDS 实例上的 CPU 和数据库连接出现大量峰值相对应。这些查询通常非常快(<5 毫秒),但突然超时。 此时,数据库操
我是一名优秀的程序员,十分优秀!