我正在尝试实现一种简单的行为:
使用opacity
的值更改CALayer
的UISlider
。
我想使用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
否定来实现您所谈论的效果。