我有一个场景,有几个 三角形 在其上用不同的颜色等,当用户触摸视图时可以创建。该 三角形 被放置在用户触摸到视图的地方,并被添加到一个 顶视图 (它与一个上下文菜单相连,但这是不同的东西)。
我想应用我的 三角形 现在它做了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)
完成部分可能应该是(没有提供足够的代码来测试)。
if done {
triangle.transform = CGAffineTransform.identity // or just .identity
}
将变换状态设置为 "原始""无变换"。
编辑
如果你的对象已经有了变换,你需要保存它或重新创建它。
所以,例如,在你的对象中添加一个属性到你的 TriangleView
保存其 "初始 "状态。
var initialTransform: CGAffineTransform!
当你启动视图并设置旋转变换时,保存这个状态
self.initialTransform = self.transform
你的动画完成就会变成:
if done {
triangle.transform = triangle.initialTransform
}