我正在尝试实现一种简单的行为:

使用opacity的值更改CALayerUISlider

我想使用CABasicAnimation做到这一点,我现在编写的代码效果很好,但是当滑块的值为1.0时,不透明度会变回0.0,而应为1.0(最终请求的值)。

这是代码:

// Function called when slider changes values
- (IBAction)sliderDidChangeValue:(id)sender {

    CABasicAnimation *anim = [self fader:1.0 from:0.0];
    anim.timeOffset = ((UISlider*)sender).value;

    // The animatedView gets the new animation with updated timeOffset
    [self.animatedView.layer addAnimation:anim forKey:@"opacity"];
}

// This a simple helper function to create the fade animation
- (CABasicAnimation*)fader:(float)to from:(float)from{

    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    anim.fromValue = [NSNumber numberWithFloat:from];
    anim.toValue = [NSNumber numberWithFloat:to];
    anim.fillMode = kCAFillModeForwards;
    anim.speed = 0.0;
    anim.duration = 1.0;
    anim.removedOnCompletion = NO;

    return anim;
}

最佳答案

这就是timeOffset的工作方式。持续时间保持不变,只是所有值都在移动。

(如果我没记错的话)可以通过使用beginTime否定来实现您所谈论的效果。

09-16 07:15