Swift中如何让CATransaction实现无限重复或指定次数重复?
嘿,这个问题我太熟了!其实CATransaction主要是用来管动画的分组、统一时长、完成回调这些全局配置的,而重复播放的逻辑是交给具体的CAAnimation对象来控制的,和CATransaction本身关系不大~我给你分两种情况讲明白:
一、实现无限重复动画
核心是给你的CAAnimation实例(比如CABasicAnimation、CAKeyframeAnimation)设置repeatCount属性为无限值,再结合CATransaction的全局配置即可:
Swift 示例代码
func animate() { CATransaction.begin() // 可选:设置全局动画时长、完成回调等CATransaction属性 CATransaction.setAnimationDuration(0.6) CATransaction.setCompletionBlock { print("如果是无限重复,这个回调不会触发哦~") } // 创建具体的动画(这里以透明度渐变为例) let fadeAnim = CABasicAnimation(keyPath: "opacity") fadeAnim.fromValue = 1.0 fadeAnim.toValue = 0.3 // 设置无限重复 fadeAnim.repeatCount = Float.infinity // 可选:开启自动反向(比如从1→0.3再回到1,形成循环) fadeAnim.autoreverses = true // 将动画添加到目标图层 yourTargetLayer.add(fadeAnim, forKey: "fadeAnimation") CATransaction.commit() }
Objective-C 示例代码
- (void)animate { [CATransaction begin]; // 可选:设置全局动画时长、完成回调 [CATransaction setAnimationDuration:0.6]; [CATransaction setCompletionBlock:^{ NSLog(@"无限重复动画的话,这个回调不会执行哦~"); }]; // 创建透明度渐变动画 CABasicAnimation *fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"]; fadeAnim.fromValue = @1.0; fadeAnim.toValue = @0.3; // 设置无限重复 fadeAnim.repeatCount = HUGE_VALF; // 可选:开启自动反向 fadeAnim.autoreverses = YES; // 添加到目标图层 [self.yourTargetLayer addAnimation:fadeAnim forKey:@"fadeAnimation"]; [CATransaction commit]; }
二、实现指定次数的重复动画
只需要把repeatCount设置为具体的数值即可,比如要重复3次:
Swift 关键代码
// 重复3次(如果开启autoreverses,一次"来回"算一次重复) fadeAnim.repeatCount = 3
Objective-C 关键代码
// 重复3次 fadeAnim.repeatCount = 3;
⚠️ 小提醒:
- 如果开启了
autoreverses = true,一次重复会包含“正向动画+反向动画”的完整循环;如果关闭,就是单纯重复正向动画。 - 要是你需要在指定次数的动画全部完成后执行逻辑,可以把代码写在CATransaction的
completionBlock里,这个回调会在所有动画结束后触发。 - 如果之前给图层添加过同名的动画,记得先调用
yourLayer.removeAnimation(forKey: "fadeAnimation")移除旧动画,避免冲突。
内容的提问来源于stack exchange,提问作者w.y
相关产品推荐
相关产品推荐

