Skip to content

Commit c4bf068

Browse files
committed
Update cell size
1 parent 0ba9291 commit c4bf068

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

Mixin/UserInterface/Controllers/Chat/SelectedPhotoInputItemsViewController.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,8 @@ extension SelectedPhotoInputItemsViewController {
116116
return size
117117
} else {
118118
let height: CGFloat = 160
119-
let width: CGFloat
120-
let ratio = CGFloat(asset.pixelWidth) / CGFloat(asset.pixelHeight)
121-
if ratio > 1 {
122-
width = ceil(height / 3 * 4)
123-
} else if ratio < 1 {
124-
width = ceil(height / 4 * 3)
125-
} else {
126-
width = height
127-
}
128-
let size = CGSize(width: width, height: height)
119+
let width: CGFloat = ceil(height / CGFloat(asset.pixelHeight) * CGFloat(asset.pixelWidth))
120+
let size = CGSize(width: min(160, max(width, 62)), height: height)
129121
cellSizeCache[asset.localIdentifier] = size
130122
return size
131123
}

Mixin/UserInterface/Windows/Cells/MediaPreviewCell.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import MixinServices
66

77
class MediaPreviewCell: UICollectionViewCell {
88

9-
static let cellSize = CGSize(width: 312, height: 312)
10-
119
@IBOutlet weak var imageView: UIImageView!
1210
@IBOutlet weak var selectedStatusImageView: UIImageView!
1311
@IBOutlet weak var mediaTypeView: MediaTypeOverlayView!
@@ -39,7 +37,7 @@ class MediaPreviewCell: UICollectionViewCell {
3937
}
4038
}
4139

42-
func load(asset: PHAsset) {
40+
func load(asset: PHAsset, size: CGSize) {
4341
if asset.mediaType == .video {
4442
mediaTypeView.style = .video(duration: asset.duration)
4543
} else {
@@ -49,8 +47,7 @@ class MediaPreviewCell: UICollectionViewCell {
4947
mediaTypeView.style = .hidden
5048
}
5149
}
52-
let targetSize = Self.cellSize * UIScreen.main.scale
53-
requestId = PHImageManager.default().requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: imageRequestOptions) { [weak self] (image, info) in
50+
requestId = PHImageManager.default().requestImage(for: asset, targetSize: size * UIScreen.main.scale, contentMode: .aspectFill, options: imageRequestOptions) { [weak self] (image, info) in
5451
self?.imageView.image = image
5552
}
5653
}

Mixin/UserInterface/Windows/SelectedPhotoInputItemsPreviewWindow.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ final class SelectedPhotoInputItemsPreviewWindow: BottomSheetView {
2323
private var selectedAssets = [PHAsset]()
2424
private var lastWidth: CGFloat = 0
2525
private var isSending = false
26+
private var cellSizeCache = [String: CGSize]()
2627

2728
override func awakeFromNib() {
2829
super.awakeFromNib()
@@ -96,7 +97,7 @@ extension SelectedPhotoInputItemsPreviewWindow: UICollectionViewDataSource {
9697
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: R.reuseIdentifier.media_preview, for: indexPath)!
9798
if indexPath.item < assets.count {
9899
let asset = assets[indexPath.item]
99-
cell.load(asset: asset)
100+
cell.load(asset: asset, size: cellSizeForItemAt(indexPath.item))
100101
cell.updateSelectedStatus(isSelected: selectedAssets.contains(asset))
101102
}
102103
return cell
@@ -107,7 +108,7 @@ extension SelectedPhotoInputItemsPreviewWindow: UICollectionViewDataSource {
107108
extension SelectedPhotoInputItemsPreviewWindow: UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
108109

109110
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
110-
MediaPreviewCell.cellSize
111+
cellSizeForItemAt(indexPath.item)
111112
}
112113

113114
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
@@ -178,4 +179,20 @@ extension SelectedPhotoInputItemsPreviewWindow {
178179
sendFileButton.isEnabled = isEnabled
179180
}
180181

182+
private func cellSizeForItemAt(_ index: Int) -> CGSize {
183+
guard index < assets.count else {
184+
return .zero
185+
}
186+
let asset = assets[index]
187+
if let size = cellSizeCache[asset.localIdentifier] {
188+
return size
189+
} else {
190+
let height: CGFloat = 312
191+
let width: CGFloat = ceil(height / CGFloat(asset.pixelHeight) * CGFloat(asset.pixelWidth))
192+
let size = CGSize(width: min(312, max(width, 120)), height: height)
193+
cellSizeCache[asset.localIdentifier] = size
194+
return size
195+
}
196+
}
197+
181198
}

0 commit comments

Comments
 (0)