12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- //
- // UIView+Ex.swift
- // TSLiveWallpaper
- //
- // Created by 100Years on 2025/7/3.
- //
- extension UIView {
- func addRealisticFlashEffect(completion: (() -> Void)? = nil) {
- // 创建闪光层
- let flashLayer = CALayer()
- flashLayer.frame = self.bounds
- flashLayer.backgroundColor = UIColor.white.cgColor
- flashLayer.opacity = 0
- self.layer.addSublayer(flashLayer)
-
- // 创建动画组
- let animationGroup = CAAnimationGroup()
- animationGroup.duration = 0.3
- animationGroup.timingFunction = CAMediaTimingFunction(name: .easeOut)
-
- // 透明度动画
- let opacityAnimation = CABasicAnimation(keyPath: "opacity")
- opacityAnimation.fromValue = 0
- opacityAnimation.toValue = 0.8
- opacityAnimation.duration = 0.1
- opacityAnimation.fillMode = .forwards
-
- // 淡出动画
- let fadeOutAnimation = CABasicAnimation(keyPath: "opacity")
- fadeOutAnimation.fromValue = 0.8
- fadeOutAnimation.toValue = 0
- fadeOutAnimation.beginTime = 0.1
- fadeOutAnimation.duration = 0.2
-
- animationGroup.animations = [opacityAnimation, fadeOutAnimation]
-
- CATransaction.begin()
- CATransaction.setCompletionBlock {
- flashLayer.removeFromSuperlayer()
- completion?()
- }
- flashLayer.add(animationGroup, forKey: "flashAnimation")
- CATransaction.commit()
- }
- }
|