3.4_实现视图旋转与缩放动画
视图旋转动画的奥秘 🌀
视图旋转是动画中一个非常酷炫的效果!你可以让任何 UIView 围绕其中心点旋转。这通过修改视图的 transform 属性来实现。transform 属性是一个 CGAffineTransform 类型,它允许你应用各种二维仿射变换,包括旋转。
要实现旋转,你需要使用 CGAffineTransform(rotationAngle:) 方法。这个方法接受一个 CGFloat 类型的角度值,单位是弧度。记住,M_PI 等于 180 度,所以 M_PI_2 就是 90 度。
UIView.animate(withDuration: 1.0, animations: {
self.myView.transform = CGAffineTransform(rotationAngle: .pi) // 旋转180度
})这段代码会让 myView 在 1 秒内顺时针旋转 180 度。是不是很简单?你可以尝试不同的角度值,比如 2 * .pi 来实现完整的 360 度旋转!
视图缩放动画的魅力 ✨
除了旋转,视图缩放也是一个非常实用的动画效果。你可以让视图变大或变小,从而吸引用户的注意力。缩放同样是通过修改视图的 transform 属性来完成的。
这次,我们将使用 CGAffineTransform(scaleX:y:) 方法。它接受两个 CGFloat 参数:scaleX 用于水平缩放,scaleY 用于垂直缩放。
scaleX和scaleY的值大于 1 会使视图放大。- 值小于 1(但大于 0)会使视图缩小。
- 值为 1 则保持原始大小。
UIView.animate(withDuration: 0.8, animations: {
self.myView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5) // 放大1.5倍
})这段代码会在 0.8 秒内将 myView 的宽度和高度都放大 1.5 倍。想象一下,当用户点击一个按钮时,按钮稍微放大一下,是不是感觉很棒?
组合旋转与缩放动画 🤩
最令人兴奋的部分来了!你可以将旋转和缩放动画组合起来,创造出更复杂的视觉效果。CGAffineTransform 允许你通过链式调用来组合多个变换。
你可以先创建一个缩放变换,然后在此基础上应用旋转变换,或者反过来。顺序很重要,不同的顺序会产生不同的最终效果。
UIView.animate(withDuration: 1.2, animations: {
let scaleTransform = CGAffineTransform(scaleX: 0.7, y: 0.7) // 缩小到70%
let rotateTransform = scaleTransform.rotated(by: .pi / 4) // 在缩放基础上旋转45度
self.myView.transform = rotateTransform
})这段代码会在 1.2 秒内,先将 myView 缩小到 70%,然后在此基础上旋转 45 度。这种组合动画能让你的应用界面更加生动活泼!
动画的重置与叠加 🔄
当你完成一个动画后,视图的 transform 属性会保持在动画结束时的状态。如果你想让视图回到原始状态,你需要将 transform 属性重置为 CGAffineTransform.identity。
UIView.animate(withDuration: 0.5, animations: {
self.myView.transform = .identity // 恢复到原始状态
})此外,你也可以在现有 transform 的基础上叠加新的变换。例如,如果你想让视图在已经旋转 90 度的基础上再旋转 90 度,你可以这样做:
UIView.animate(withDuration: 0.6, animations: {
self.myView.transform = self.myView.transform.rotated(by: .pi / 2) // 在当前基础上再旋转90度
})这种叠加方式非常灵活,让你能够创建出动态且响应式的动画序列。掌握这些技巧,你的应用界面将变得无比精彩!🚀