【问题标题】:CABasicAnimation maintain a constant speedCABasicAnimation 保持匀速
【发布时间】:2012-08-16 06:36:59
【问题描述】:

我正在尝试使用 CABasicAnimation 创建一个简单的动画,该动画将始终保持恒定速度,即使动画必须行进的距离永远不会相同。到目前为止,这是我的代码,它正在滚动一个大小总是不同的标签,但还不能保持恒定的速度。非常感谢您的帮助。

CABasicAnimation *theAnimation;
theAnimation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
theAnimation.speed = 1.0f;

NSNumber *fromValue = [NSNumber numberWithFloat:self.mainLabel.frame.origin.x];
NSNumber *toValue = [NSNumber numberWithFloat:-self.mainLabel.frame.size.width - self.view.frame.size.height];
theAnimation.fromValue = fromValue;
theAnimation.toValue = toValue;
//theAnimation.duration = toValue.floatValue - fromValue.floatValue;//Not right.
theAnimation.repeatCount = 999;
theAnimation.autoreverses = NO;
[mainLabel.layer addAnimation:theAnimation forKey:@"animateLayer"];

【问题讨论】:

    标签: iphone objective-c ios ipad uilabel


    【解决方案1】:

    您是否尝试添加:

     theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    

    之后的例子
     theAnimation.speed = 1.0f;   
    

    ?

    此函数设置动画的线性速度。

    【讨论】:

    • 是的,我试过了,但是动画已经是线性的了。问题是不同的标签尺寸会产生不同的动画速度。它将以恒定速率滚动,但当标签大小发生变化时,它将以不同的恒定速率滚动。这是因为动画要覆盖的距离或多或少。这是动画重新开始的时候,具有不同的标签 + 大小。
    • 可能您需要用于此关键帧动画,因此设置“检查点”,您将在其中更改系数以保存持久动画。这种动画的这个很好的例子(唯一的例子)。
    • 嗯,也许是这样,但我想我可能真的可以用这个theAnimation.duration = (fromValue.floatValue - toValue.floatValue)/440;
    • 看,如果您将此动画应用于不同尺寸的不同标签,您需要排列不同的费率。然后根据适用的标签检查并设置此费率。因此,对于一个标签值 theAnimation.duration 是正常的,但对于另一个标签,例如这个太小或太大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多