动画完成后如何设置旧的变换?

问题描述 投票:0回答:1

我有一个场景,有几个 三角形 在其上用不同的颜色等,当用户触摸视图时可以创建。该 三角形 被放置在用户触摸到视图的地方,并被添加到一个 顶视图 (它与一个上下文菜单相连,但这是不同的东西)。

我想应用我的 三角形 现在它做了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)
            }
         })
      }                

我想问题出在 完成 部分。.autoreverse 选项的反向动画做得很好,但当它完成时,它并没有缩回去。

我怎样才能保存我的 三角形 并为其设置一个脉冲动画?


更新

我忘了说,每 三角形 拥有 轮换 储存在数据库中的值。

triangle.rotation.value

默认的转换确实是通过 .身份 方法是 旋转值 0. 当对某一个人实施旋转时 三角形 对象,它应该将其设置为原始值,存储在 三角形 对象上面。

let triangles = TriangleView(x: touchpoint.x, y: touchpoint.y, rotation: triangle.rotation.value)
ios swift cgaffinetransform
1个回答
1
投票

完成部分可能应该是(没有提供足够的代码来测试)。

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

将变换状态设置为 "原始""无变换"。


编辑

如果你的对象已经有了变换,你需要保存它或重新创建它。

所以,例如,在你的对象中添加一个属性到你的 TriangleView 保存其 "初始 "状态。

var initialTransform: CGAffineTransform!

当你启动视图并设置旋转变换时,保存这个状态

self.initialTransform = self.transform

你的动画完成就会变成:

if done {
    triangle.transform = triangle.initialTransform
}
© www.soinside.com 2019 - 2024. All rights reserved.