我的应用程序用于CALayer
绘制视图。更准确地说,它drawLayer:inContext:
在 aUIView
的顶层的子层上使用该方法。这是让连续drawLayer:inContext:
绘图的“隐式”动画随着时间的推移逐渐淡入彼此的好方法。渐变动画发生得相当快,可能在 0.25 秒内,但要更改其持续时间,只需实现另一个名为actionForLayer:forKey:
. 在这个完美运行的示例实现中,默认持续时间延长到 2.0 秒:
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:event];
animation.duration = 2.0;
return animation;
// or return nil for the default duration.
}
关于手头的问题。
如果你调用[sublayer setNeedsDisplay]
的速度快于渐变完成的时间,那么每次新的渐变你都会看到一个突然的跳跃。从外观上看,正在进行的淡入淡出被取消,它的最终状态被用作新淡入淡出的起点。这可能并不令人惊讶,但视觉结果是相当不受欢迎的。
考虑从黑色到白色的 10 秒渐变,在开始后 5 秒触发另一个渐变到黑色的场景。动画将开始从黑色渐变为白色,但是当它处于“半灰色”时,它会跳到全白,然后再次渐变为黑色。
有没有办法防止这种情况发生?我可以让图层从灰色变回黑色吗?有没有相当于说的 CALayer 绘图UIViewAnimationOptionBeginFromCurrentState
(在 UIView 动画中使用)?
干杯。