首页性能优化
This commit is contained in:
parent
eea76fabfc
commit
84689e7ade
29
MoviaBox/Base/Extension/UIImage+SPAdd.swift
Normal file
29
MoviaBox/Base/Extension/UIImage+SPAdd.swift
Normal file
@ -0,0 +1,29 @@
|
||||
//
|
||||
// UIImage+SPAdd.swift
|
||||
// MoviaBox
|
||||
//
|
||||
// Created by 长沙佳儿 on 2025/6/18.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
extension UIImage {
|
||||
|
||||
///添加模糊效果
|
||||
func applyBlur() -> UIImage? {
|
||||
let context = CIContext(options: nil)
|
||||
|
||||
guard let ciImage = CIImage(image: self) else { return nil }
|
||||
|
||||
let filter = CIFilter(name: "CIGaussianBlur")
|
||||
filter?.setValue(ciImage, forKey: kCIInputImageKey)
|
||||
filter?.setValue(50, forKey: kCIInputRadiusKey) // 调整模糊半径
|
||||
guard let outputImage = filter?.outputImage else { return nil }
|
||||
|
||||
if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
|
||||
return UIImage(cgImage: cgImage)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
}
|
@ -9,11 +9,35 @@ import UIKit
|
||||
|
||||
class SPFadeEdgeImageView: UIImageView {
|
||||
|
||||
override var image: UIImage? {
|
||||
didSet {
|
||||
applyBlurAndEdgeFadeEffect()
|
||||
}
|
||||
}
|
||||
// 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?
|
||||
|
||||
@ -23,24 +47,6 @@ class SPFadeEdgeImageView: UIImageView {
|
||||
}
|
||||
|
||||
private func applyBlurAndEdgeFadeEffect() {
|
||||
if blurredImage != nil, blurredImage == image {
|
||||
return
|
||||
}
|
||||
// 1. 添加高斯模糊效果到图片
|
||||
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
|
||||
}
|
||||
|
||||
// 2. 创建渐变蒙版(四周虚化)
|
||||
let maskLayer = CAShapeLayer()
|
||||
|
@ -200,22 +200,27 @@ extension SPHomeViewController {
|
||||
private func setEmptyView() {
|
||||
if SPNetworkReachabilityManager.manager.isReachable != true {
|
||||
self.addNoNetworkEmptyView { [weak self] in
|
||||
self?.updateEmptyState()
|
||||
guard let self = self else { return }
|
||||
self.updateEmptyState()
|
||||
if self.viewModel.isEmptyData, SPNetworkReachabilityManager.manager.isReachable == true {
|
||||
self.updateAllData(completer: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func reachabilityDidChangeNotification() {
|
||||
updateEmptyState()
|
||||
|
||||
if viewModel.isEmptyData, SPNetworkReachabilityManager.manager.isReachable == true {
|
||||
self.updateAllData(completer: nil)
|
||||
}
|
||||
}
|
||||
|
||||
///更新空白页面状态
|
||||
private func updateEmptyState() {
|
||||
if SPNetworkReachabilityManager.manager.isReachable == true {
|
||||
self._setupUI()
|
||||
if viewModel.isEmptyData {
|
||||
self.updateAllData(completer: nil)
|
||||
}
|
||||
self.removeNoNetworkEmptyView()
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,8 @@ class SPHomeHeaderView: UICollectionReusableView {
|
||||
let moduleModel = viewModel?.moduleModel
|
||||
|
||||
let bannerModel = self.viewModel?.moduleModel?.bannerData?.first
|
||||
self.bannerBgImageView.sp_setImage(url: bannerModel?.image_url)
|
||||
setBannerBgImage(model: bannerModel)
|
||||
|
||||
|
||||
stackView.removeAllArrangedSubview()
|
||||
|
||||
@ -64,6 +65,8 @@ class SPHomeHeaderView: UICollectionReusableView {
|
||||
}
|
||||
}
|
||||
|
||||
private var currentBannerModel: SPShortModel?
|
||||
|
||||
var isDidAppear: Bool = false {
|
||||
didSet {
|
||||
self.categoryVideoView1.isDidAppear = isDidAppear
|
||||
@ -159,6 +162,25 @@ class SPHomeHeaderView: UICollectionReusableView {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
private func setBannerBgImage(model: SPShortModel?) {
|
||||
self.currentBannerModel = model
|
||||
|
||||
if let image = model?.blurImage {
|
||||
self.bannerBgImageView.image = image
|
||||
return
|
||||
}
|
||||
|
||||
self.bannerBgImageView.sp_setImage(url: model?.image_url) { [weak self] image, url in
|
||||
guard let self = self else { return }
|
||||
if model == self.currentBannerModel {
|
||||
if model?.blurImage == nil {
|
||||
model?.blurImage = image?.applyBlur()
|
||||
}
|
||||
self.bannerBgImageView.image = model?.blurImage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension SPHomeHeaderView {
|
||||
@ -223,8 +245,7 @@ extension SPHomeHeaderView: ZKCycleScrollViewDelegate, ZKCycleScrollViewDataSour
|
||||
|
||||
func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didScrollFromIndex fromIndex: Int, toIndex: Int) {
|
||||
let model = self.viewModel?.moduleModel?.bannerData?[toIndex]
|
||||
|
||||
self.bannerBgImageView.sp_setImage(url: model?.image_url)
|
||||
setBannerBgImage(model: model)
|
||||
|
||||
}
|
||||
|
||||
|
@ -104,7 +104,7 @@ class SPHomeViewModel: NSObject {
|
||||
}
|
||||
|
||||
var isEmptyData: Bool {
|
||||
if dataArr.count > 0 || (playHistoryArr?.count ?? 0) > 0 || moduleModel != nil {
|
||||
if dataArr.count > 0 || (playHistoryArr?.count ?? 0) > 0 || moduleModel != nil || categoryDataArr1.count > 0 || categoryDataArr2.count > 0 {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
@ -43,6 +43,9 @@ class SPShortModel: SPModel, SmartCodable {
|
||||
@IgnoredKey
|
||||
var sp_isSelected: Bool?
|
||||
|
||||
@IgnoredKey
|
||||
var blurImage: UIImage?
|
||||
|
||||
|
||||
static func mappingForKey() -> [SmartKeyTransformer]? {
|
||||
return [
|
||||
|
Loading…
x
Reference in New Issue
Block a user