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)
您还可以使用属性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)
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |