iOS提供图像转场动画,可实现酷炫的转场特效。动画包括:溶解、折叠、复印机、暴露、翻页、波纹、滑动等等。
一、溶解动画
CIDissolveTransition提供溶解动画,我们来看看对应的转场动画效果:

在CIFilter指定CIDissolveTransition,使用smoothstep函数生成时间,示例代码如下:
import simd
func dissolveFilter(_ inputImage: CIImage,
to targetImage: CIImage,
time: TimeInterval) -> CIImage? {
let inputTime = simd_smoothstep(0, 1, time)
guard let filter = CIFilter(name:"CIDissolveTransition",
withInputParameters:
[
kCIInputImageKey: inputImage,
kCIInputTargetImageKey: targetImage,
kCIInputTimeKey: inputTime
]) else {
return nil
}
return filter.outputImage
}
使用CADisplayLink来开始执行动画,添加到run loop,示例如下:
func beginTransition() {
time = 0
dt = 0.005
displayLink = CADisplayLink(target: self,
selector: #selector(stepTime))
displayLink.add(to: RunLoop.current,
forMode: RunLoopMode.defaultRunLoopMode)
}
如果超过1s动画结束,移除displayLink,否则更新动画:
@objc
func stepTime() {
time += dt
if time > 1 {
displayLink.remove(from:RunLoop.main, forMode:RunLoopMode.defaultRunLoopMode)
} else {
guard let dissolvedCIImage = dissolveFilter(sourceCIImage,
to:finalCIImage,
time:time) else {
return
}
let cgImage = context.createCGImage(dissolvedCIImage,
from: dissolvedCIImage)
imageView.image = UIImage(CGImage:cgImage)
}
}
二、折叠动画
CIAccordionFoldTransition折叠动画,输入参数如下表所示:
| 参数 | 描述 |
| inputNumberOfFolds | 折叠数量,默认:3.0, 最小值:1.0, 最大值:50.0 |
| inputFoldShadowAmount | 阴影数量,默认:0.1, 最小值:0.0, 最大值:1.0 |
| inputTime | 时间,默认:0.0, 最小值:0.0, 最大值:1.0 |
三、复印机动画
CICopyMachineTransition复印机动画,输入参数如下表所示:
| 参数 | 描述 |
| inputExtent | 输入矩形,默认值[0,0,300,300] |
| inputColor | 输入颜色 |
| inputTime | 输入时间,默认值为0 |
| inputAngle | 输入角度,默认值为0 |
| inputWidth | 输入宽度,默认值为200 |
| inputOpacity | 透明度,默认值为1.3 |
复印机的转场动画如下:

四、暴露动画
CIModTransition暴露动画,是显示一个个不规则形状的洞,输入参数如下:
| 参数 | 描述 |
| inputCenter | 中心点,默认值[150,150] |
| inputTime | 输入时间,默认值为0 |
| inputAngle | 输入角度,默认值为20 |
| inputRadius | 输入半径,默认值为150.0 |
| inputCompression | 压缩,默认值为300 |
对应的转场动画效果:

五、翻页动画
CIPageCurlWithShadowTransition提供翻页动画,输入参数如下:
| 参数 | 描述 |
| inputExtent | 面积,默认值[0,0,0,0] |
| inputTime | 输入时间,默认值为0 |
| inputAngle | 输入角度,默认值为0 |
| inputRadius | 输入半径,默认值100,最小值0.01,最大值400 |
翻页的转场动画如下:

六、波纹动画
CIRippleTransition提供波纹动画,输入参数如下:
| 参数 | 描述 |
| inputCenter | 中心点,默认值[150,150] |
| inputExtent | 面积,默认值[0,0,300,300] |
| inputTime | 输入时间,默认值为0 |
| inputWidth | 输入宽度,默认值为100 |
| inputScale | 缩放系数,默认值为50.0 |
波纹动画效果如下:

七、滑动动画
CISwipeTransition提供滑动动画,输入参数如下:
| 参数 | 描述 |
| inputExtent | 面积,默认值[0,0,300,300] |
| inputColor | 颜色 |
| inputTime | 时间,默认值为0 |
| inputAngle | 角度,默认值为0 |
| inputWidth | 宽度,默认值为300 |
| inputOpacity | 透明度,默认值为0 |
滑动的转场动画,可以指定角度实现从上到下、从下到上、从左到右、从右到左。效果如下:




















