UIView+Ex.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //
  2. // UIView+Ex.swift
  3. // TSLiveWallpaper
  4. //
  5. // Created by 100Years on 2025/7/3.
  6. //
  7. extension UIView {
  8. func addRealisticFlashEffect(completion: (() -> Void)? = nil) {
  9. // 创建闪光层
  10. let flashLayer = CALayer()
  11. flashLayer.frame = self.bounds
  12. flashLayer.backgroundColor = UIColor.white.cgColor
  13. flashLayer.opacity = 0
  14. self.layer.addSublayer(flashLayer)
  15. // 创建动画组
  16. let animationGroup = CAAnimationGroup()
  17. animationGroup.duration = 0.3
  18. animationGroup.timingFunction = CAMediaTimingFunction(name: .easeOut)
  19. // 透明度动画
  20. let opacityAnimation = CABasicAnimation(keyPath: "opacity")
  21. opacityAnimation.fromValue = 0
  22. opacityAnimation.toValue = 0.8
  23. opacityAnimation.duration = 0.1
  24. opacityAnimation.fillMode = .forwards
  25. // 淡出动画
  26. let fadeOutAnimation = CABasicAnimation(keyPath: "opacity")
  27. fadeOutAnimation.fromValue = 0.8
  28. fadeOutAnimation.toValue = 0
  29. fadeOutAnimation.beginTime = 0.1
  30. fadeOutAnimation.duration = 0.2
  31. animationGroup.animations = [opacityAnimation, fadeOutAnimation]
  32. CATransaction.begin()
  33. CATransaction.setCompletionBlock {
  34. flashLayer.removeFromSuperlayer()
  35. completion?()
  36. }
  37. flashLayer.add(animationGroup, forKey: "flashAnimation")
  38. CATransaction.commit()
  39. }
  40. }