87 lines
2.8 KiB
Swift
87 lines
2.8 KiB
Swift
//
|
||
// SPFadeEdgeImageView.swift
|
||
// MoviaBox
|
||
//
|
||
// Created by 佳尔 on 2025/4/28.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
class SPFadeEdgeImageView: UIImageView {
|
||
|
||
// override var image: UIImage? {
|
||
// didSet {
|
||
//
|
||
// if blurredImage != nil, blurredImage == image {
|
||
// return
|
||
// }
|
||
//
|
||
//// if let newImage = image?.applyBlur() {
|
||
//// self.blurredImage = newImage
|
||
//// self.image = newImage
|
||
//// }
|
||
//
|
||
// let context = CIContext(options: nil)
|
||
// guard let image = self.image else { return }
|
||
// guard let ciImage = CIImage(image: image) else { return }
|
||
//
|
||
// let filter = CIFilter(name: "CIGaussianBlur")
|
||
// filter?.setValue(ciImage, forKey: kCIInputImageKey)
|
||
// filter?.setValue(50, forKey: kCIInputRadiusKey) // 调整模糊半径
|
||
// guard let outputImage = filter?.outputImage else { return }
|
||
//
|
||
// if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
|
||
// let blurredImage = UIImage(cgImage: cgImage)
|
||
// self.blurredImage = blurredImage
|
||
// self.image = blurredImage
|
||
// }
|
||
//
|
||
// }
|
||
// }
|
||
|
||
private var blurredImage: UIImage?
|
||
|
||
override func layoutSubviews() {
|
||
super.layoutSubviews()
|
||
applyBlurAndEdgeFadeEffect()
|
||
}
|
||
|
||
private func applyBlurAndEdgeFadeEffect() {
|
||
|
||
// 2. 创建渐变蒙版(四周虚化)
|
||
let maskLayer = CAShapeLayer()
|
||
maskLayer.frame = bounds
|
||
|
||
// 画一个圆形的反向路径,中心完全显示,四周渐变透明
|
||
let path = UIBezierPath(rect: bounds)
|
||
let insetRect = bounds.insetBy(dx: bounds.width * 0.1, dy: bounds.height * 0.1)
|
||
let innerPath = UIBezierPath(roundedRect: insetRect, cornerRadius: 20)
|
||
path.append(innerPath)
|
||
path.usesEvenOddFillRule = true
|
||
|
||
maskLayer.path = path.cgPath
|
||
maskLayer.fillRule = .evenOdd
|
||
|
||
// 3. 创建径向渐变图层
|
||
let gradientLayer = CAGradientLayer()
|
||
gradientLayer.frame = bounds
|
||
gradientLayer.colors = [
|
||
UIColor.black.withAlphaComponent(1).cgColor,
|
||
UIColor.black.withAlphaComponent(0).cgColor
|
||
]
|
||
gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.5)
|
||
gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)
|
||
gradientLayer.locations = [0.5, 1]
|
||
gradientLayer.type = .radial
|
||
|
||
// 4. 添加渐变蒙版到图片
|
||
let containerLayer = CALayer()
|
||
containerLayer.frame = bounds
|
||
containerLayer.addSublayer(gradientLayer)
|
||
containerLayer.mask = maskLayer
|
||
|
||
self.layer.mask = containerLayer
|
||
}
|
||
|
||
}
|