动画结束后如何设置旧转换?

How can I set the old transformation after the animation has finished?

我有一个场景,上面有几个三角形,颜色不同等等,用户可以在触摸视图时创建这些三角形。 triangle 放置在用户触摸视图的位置,并添加到 topView(链接到上下文菜单,但这是不同的东西) .

我想在动画完成后应用 三角形 的当前变换。 现在它对其进行了 4 次动画处理,当动画结束时它会突然收缩而没有动画,并且不会将其放置在旧位置。

      let invertedTransform = topView.transform.inverted()
      let triangles = TriangleView()
      triangles.transform = invertedTransform
      topView.addsubview(triangles)
      triangleArray.append(triangles)

      for triangle in triangleArray {
        UIView.animate(withDuration: 1, delay: 0, options: [.repeat,.autoreverse], animations: {
        UIView.setAnimationRepeatCount(4)
           triangle.transform = CGAffineTransform(scaleX: 2.4, y: 2.4) }, completion: { done in
           if done {
             triangle.transform = CGAffineTransform(scaleX: 1, y: 1)
            }
         })
      }                

我认为错误在于 completion part.The .autoreverse 选项正在执行反向动画但是当它吃完了不退缩

如何保存 三角形 的当前变换并为其设置脉动动画?


更新

我忘了提到每个 三角形 都有一个 旋转 值存储在数据库中:

triangle.rotation.value

确实通过 .identity 方法给出的默认转换是 旋转值 0。 triangle 对象,它应该将其设置回存储在上面 triangle 对象中的原始值:

let triangles = TriangleView(x: touchpoint.x, y: touchpoint.y, rotation: triangle.rotation.value)

完成部分大概应该是(没有提供足够的代码来测试它):

if done {
    triangle.transform = CGAffineTransform.identity // or just .identity
}

将变换状态设置回 "original" / "no transform"。


编辑

如果您的对象已有转换,您将需要保存它或重新创建它。

因此,例如,将 属性 添加到您的 TriangleView 以保存其 "initial" 状态:

var initialTransform: CGAffineTransform!

当您初始化视图并设置旋转变换时,保存:

self.initialTransform = self.transform

你的动画完成后变成:

if done {
    triangle.transform = triangle.initialTransform
}