动画结束后如何设置旧转换?
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
}
我有一个场景,上面有几个三角形,颜色不同等等,用户可以在触摸视图时创建这些三角形。 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
}