我正在尝试使用Core Animation创建一个小的发光动画。动画到目前为止工作正常。问题是,动画用于表格单元格。当动画添加到当前在尚未可见的单元格中的图层(不滚动)时,动画不会以某种方式启动?好像CoreAnimation不会为当前不可见的图层设置动画?
我的代码是:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[animation setFromValue:[NSNumber numberWithFloat:0.0]];
[animation setToValue:[NSNumber numberWithFloat:1.0]];
[animation setDuration:self.currentBlinkFrequency];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[animation setAutoreverses:YES];
[animation setRepeatCount:HUGE_VALF];
[[self.signalImage layer] addAnimation:animation forKey:@"opacity"];
答案 0 :(得分:1)
好的找到了解决方法。我改用了UIView动画方法。因为我可以在动画期间更改/关闭动画速度,所以我需要使用以下代码来避免在同一视图中踢出多个动画。
此代码触发动画:
if (self.currentBlinkFrequency == 0) {
self.shouldContinueBlinking = FALSE;
self.animationIsRunning = FALSE;
} else {
self.shouldContinueBlinking = TRUE;
if (self.animationIsRunning == FALSE) {
self.animationIsRunning = TRUE;
[self blinkAnimation:@"blink" finished:YES target:self.signalImage];
}
}
“blinkAnimation”方法的调用anomation代码是从stackoverflow here
中的另一篇文章借来的- (void)blinkAnimation:(NSString *)animationId finished:(BOOL)finished target:(UIView *)target
{
if (self.shouldContinueBlinking) {
[UIView beginAnimations:animationId context:target];
[UIView setAnimationDuration:self.currentBlinkFrequency];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(blinkAnimation:finished:target:)];
if ([target alpha] == 1.0f)
[target setAlpha:0.0f];
else
[target setAlpha:1.0f];
[UIView commitAnimations];
}
}