Ios CAGROUP动画不显示动画。单独添加动画时效果良好

Ios CAGROUP动画不显示动画。单独添加动画时效果良好,ios,swift,core-animation,Ios,Swift,Core Animation,我正在使用Swift和核心动画实现一个简单的活动指示器。核心动画循环仅由两个动画组成。当我直接将它们添加到图层时,它们工作得非常好。当我将它们添加为一个CAAnimationGroup时,根本没有发生任何事情。我完全被这种行为弄糊涂了,我已经检查了stackoverflow上关于CAAnimationGroup的所有问题、所有网络教程,并多次阅读了官方文档。我不知道发生了什么事。请帮忙 动画: let anim1 = CABasicAnimation(keyPath: "strokeEnd")

我正在使用Swift和核心动画实现一个简单的活动指示器。核心动画循环仅由两个动画组成。当我直接将它们添加到图层时,它们工作得非常好。当我将它们添加为一个CAAnimationGroup时,根本没有发生任何事情。我完全被这种行为弄糊涂了,我已经检查了stackoverflow上关于CAAnimationGroup的所有问题、所有网络教程,并多次阅读了官方文档。我不知道发生了什么事。请帮忙

动画:

let anim1 = CABasicAnimation(keyPath: "strokeEnd")
anim1.fromValue = 0
anim1.toValue = 1.0
anim1.duration = 2.0
anim1.beginTime = CACurrentMediaTime()

let anim2 = CABasicAnimation(keyPath:"strokeStart")
anim2.fromValue = 0
anim2.toValue = 1.0
anim2.duration = 2.0
anim2.beginTime = CACurrentMediaTime() + 2.0
这完全符合预期:

shapeLayer.addAnimation(anim1, forKey:nil)
shapeLayer.addAnimation(anim2, forKey:nil)
这对我的图层没有任何影响:

let group = CAAnimationGroup()
group.animations = [anim1, anim2]
group.duration = 4.0
shapeLayer.addAnimation(group, forKey: nil)

我制作了一个用于操场的简短演示片段:。请你自己看看,帮我解决这个问题。(如果您不确定如何使用Playway进行动画原型制作:)

试着这样做,似乎CACurrentMediaTime()+2.0会引起问题

import UIKit
import XCPlayground
let view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
let shapeLayer = CAShapeLayer()
let size:CGFloat = 52
let rect = CGRect(x: view.bounds.midX - size/2, y: view.bounds.midY-size/2, width: size, height: size)
shapeLayer.path = UIBezierPath(ovalInRect: rect).CGPath
shapeLayer.fillColor = UIColor.clearColor().CGColor
shapeLayer.strokeColor = UIColor.redColor().CGColor
shapeLayer.lineWidth = 3
shapeLayer.strokeStart = 0
shapeLayer.strokeEnd = 0
view.layer.addSublayer(shapeLayer)
XCPShowView("view", view)

let beginTime = CACurrentMediaTime()
let anim1 = CABasicAnimation(keyPath: "strokeEnd")
anim1.fromValue = 0
anim1.toValue = 1
anim1.duration = 2

let anim2 = CABasicAnimation(keyPath:"strokeEnd")
anim2.fromValue = 1
anim2.toValue = 0
anim2.duration = 2
anim2.beginTime =  2

let group = CAAnimationGroup()
group.duration = 4.0
group.removedOnCompletion = true
group.animations = [anim1, anim2]
//shapeLayer.addAnimation(anim1, forKey:nil)
//shapeLayer.addAnimation(anim2, forKey:nil)
shapeLayer.addAnimation(group, forKey: nil)

@MDB983的答案看起来是可行的,但没有解释原因

将动画直接添加到层时,动画的开始时间基于当前媒体时间


将动画添加到动画组时,其“本地时间”即为动画组。动画组中的“开始时间”为0表示该组的开始,而“开始时间”为1.0表示整个动画组的1秒,以此类推。将动画添加到动画组时,将“开始时间”更改为零,而不是从
CACurrentMediaTime()开始

我知道这是一个老问题,但我在swift 4中的动画组也是这么做的。我错过的是为CAAnimationGroup本身指定起始时间(我假设子动画将跟随它们的起始时间)。默认情况下,CAAnimationGroup的beginTime为0.0

let group = CAAnimationGroup()
group.beginTime = CACurrentMediaTime() + delay
group.duration = 4.0
group.removedOnCompletion = true
group.animations = [anim1, anim2]

这太完美了,非常感谢!现在很清楚发生了什么。