Wallpaper_Home/wallpaper_project/Rank/C/custlayout.swift
忆海16 5ff1070967 mtg
2024-07-23 11:44:01 +08:00

86 lines
2.9 KiB
Swift

//
// custlayout.swift
// wallpaper_project
import Foundation
import UIKit
//class CustomLayout: UICollectionViewLayout {
// private var cache: [UICollectionViewLayoutAttributes] = []
// private var contentHeight: CGFloat = 0
//
// override var collectionViewContentSize: CGSize {
// return CGSize(width: collectionView?.bounds.width ?? 0, height: contentHeight)
// }
//
// override func prepare() {
// guard let collectionView = collectionView else { return }
// cache.removeAll()
//
// let width = collectionView.bounds.width
// var yOffset: CGFloat = 0
//
// for item in 0..<collectionView.numberOfItems(inSection: 0) {
// let indexPath = IndexPath(item: item, section: 0)
// let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)
//
// let frame = CGRect(x: 0, y: yOffset, width: width, height: collectionView.bounds.height * 2.5 / 3)
// yOffset += collectionView.bounds.height * 2.5 / 3
//
// attributes.frame = frame
// cache.append(attributes)
// }
//
// contentHeight = yOffset
// }
//
// override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
// return cache.filter { $0.frame.intersects(rect) }
// }
//
// override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
// return cache[indexPath.item]
// }
//}
class CustomLayout: UICollectionViewLayout {
private var cache: [UICollectionViewLayoutAttributes] = []
private var contentHeight: CGFloat = 0
override var collectionViewContentSize: CGSize {
return CGSize(width: collectionView?.bounds.width ?? 0, height: contentHeight)
}
override func prepare() {
guard let collectionView = collectionView else { return }
cache.removeAll()
let width = collectionView.bounds.width
var yOffset: CGFloat = 0
for item in 0..<collectionView.numberOfItems(inSection: 0) {
let indexPath = IndexPath(item: item, section: 0)
let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)
let frame = CGRect(x: 0, y: yOffset, width: width, height: collectionView.bounds.height * 2.5 / 3)
yOffset += collectionView.bounds.height * 2.5 / 3
attributes.frame = frame
cache.append(attributes)
}
contentHeight = yOffset
}
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
return cache.filter { $0.frame.intersects(rect) }
}
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return cache[indexPath.item]
}
}