探索iOS转场动画

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

滑动的转场动画,可以指定角度实现从上到下、从下到上、从左到右、从右到左。效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐福记456

您的鼓励和肯定是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值