将动画添加到不可见的图层时,未启动CABasicAnimation

时间:2010-08-09 10:48:52

标签: iphone core-animation

我正在尝试使用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"];    

1 个答案:

答案 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];
    }
}