使用pop创建无尽的动画?

Tho*_*yer 0 animation ios facebook-pop

使用Coreanimation框架时,我可以设置动画重复.我想设置一个"吸引注意"模式的按钮,这将使他成长和缩小一小部分以引起用户的注意.

我已经通过完成块链接了增长和缩小动画.问题是我是否以及如何从第二个动画的完成块开始第一个动画.

我确实收到了以下有意义的警告.这个问题的优雅解决方案是什么?我不喜欢为这样的东西创造计时器.

在此块中强烈捕获'scaleAnimation'可能会导致保留周期

- (void)attractAttention:(BOOL)flag{
    _attractAttention = flag;
    float resizeValue = 1.2f;

        // Grow animation
    POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
    scaleAnimation.fromValue  = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
    scaleAnimation.toValue  = [NSValue valueWithCGSize:CGSizeMake(resizeValue, resizeValue)];
    scaleAnimation.completionBlock = ^(POPAnimation *anim, BOOL finished) {
            // Grow animation done
        POPSpringAnimation *scaleAnimationDown = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
        scaleAnimationDown.fromValue  = [NSValue valueWithCGSize:CGSizeMake(resizeValue, resizeValue)];
        scaleAnimationDown.toValue  = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];

        scaleAnimationDown.completionBlock = ^(POPAnimation *anim, BOOL finished) {
                // Shrink animation done
            if (_attractAttention) {
                [self.layer pop_addAnimation:scaleAnimation forKey:@"scaleUpAnimation"];
            }
        };

        [self.layer pop_addAnimation:scaleAnimationDown forKey:@"scaleDownAnimation"];
    };

    [self.layer pop_addAnimation:scaleAnimation forKey:@"scaleUpAnimation"];
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我还试图创建一个动画的弱引用.这会删除错误,但动画不再起作用:

__weak typeof(scaleAnimation) weakAnimation = scaleAnimation;
Run Code Online (Sandbox Code Playgroud)

fra*_*y88 5

您还可以使用属性autoreveres和repeatCount来实现相同的结果,而无需使用块.它降低了复杂性:

POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(0.5, 0.5)];
scaleAnimation.springBounciness = 0.f;
scaleAnimation.autoreverses = YES;
scaleAnimation.repeatCount=HUGE_VALF;
[layer pop_addAnimation:scaleAnimation forKey:@"scale"];
Run Code Online (Sandbox Code Playgroud)

更好的是,如果你查看这个类https://github.com/facebook/pop/blob/master/pop/POPAnimation.h你会看到有一个repeatForever属性,所以你可以用它替换repeatCount:

scaleAnimation.repeatForever=YES;
Run Code Online (Sandbox Code Playgroud)