首页性能优化

This commit is contained in:
zeng 2025-06-19 09:50:44 +08:00
parent eea76fabfc
commit 84689e7ade
6 changed files with 95 additions and 31 deletions

View 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
}
}

View File

@ -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()

View File

@ -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()
}
}

View File

@ -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)
}

View File

@ -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

View File

@ -43,6 +43,9 @@ class SPShortModel: SPModel, SmartCodable {
@IgnoredKey
var sp_isSelected: Bool?
@IgnoredKey
var blurImage: UIImage?
static func mappingForKey() -> [SmartKeyTransformer]? {
return [