【发布时间】:2016-11-29 21:21:06
【问题描述】:
我必须为离线计算的元素的 alpha 设置动画。让我们谈谈简单的 alpha 动画。 alpha 为零,alpha 增长到 1,停留一段时间又回到零。
如下图所示:
动画会有不同的时间。我需要一些可以给出时间(t)并获得值(v)的东西。
这个动画将被放在一个基于CIFilter的类中,并用于为该过滤器设置动画,因为这个过滤器的结果将离线计算,所以没有CALayer可以添加它,所以使用CAKeyframeAnimation或CABasicAnimation 是不可能的。
如果我可以使用 CALayer,我会这样做:
CABasicAnimation* fadeInOut = [CABasicAnimation animation];
fadeInOut.keyPath = @"filters.myFilter.inputRadius";
fadeInOut.fromValue = @(0);
fadeInOut.toValue = @(10);
fadeInOut.duration = 0.2f;
fadeInOut.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
fadeInOut.autoreverses = YES;
但问题是这条线......没有添加动画的图层。就像我说的,我在 CIFilter 班级里!
[self.layer addAnimation:fadeInOut forKey:nil]; // NO WAY!
所以,我的问题是:在我为动画定义的时间间隔内,有什么东西可以给我这种曲线的时间值吗?
【问题讨论】:
-
请停止使用 iPhone 不必要地标记您的所有问题。请阅读标签说明以了解何时应使用它。谢谢。
-
请注意,您显示的曲线不能用单个三次曲线渲染。您要么需要多条曲线,要么——因为这是一条正常的函数曲线,而不是一条自循环的曲线——你应该用一个普通的旧
y=(fx)函数对其进行建模。对于这种类型的函数,贝塞尔曲线是不必要的,而且会适得其反。 -
@Mike'Pomax'Kamermans - 谢谢你,我使用了smoothstep的想法,现在它就像丝绸一样工作。谢谢,圣诞快乐!
标签: ios animation bezier cifilter