У меня есть контроллер представления с представлением коллекции, который выглядит следующим образом:
import UIKit
private let reuseIdentifier = "LightboxCollectionViewCell"
class LightboxViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
var items: [Image]?
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.delegate = self
self.collectionView.dataSource = self
let collectionViewCell = UINib(nibName: reuseIdentifier, bundle: nil)
self.collectionView.register(collectionViewCell, forCellWithReuseIdentifier: reuseIdentifier)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return items!.count
}
func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as? LightboxCollectionViewCell else {
fatalError(String(format: "The dequeued cell is not an instance of %s.", reuseIdentifier))
}
// Reset the zoom
cell.imageView.transform = CGAffineTransform.identity
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as? LightboxCollectionViewCell else {
fatalError(String(format: "The dequeued cell is not an instance of %s.", reuseIdentifier))
}
if let item = items?[indexPath.row] {
cell.initialize(media: item)
}
return cell
}
}
А вот класс ячеек:
import UIKit
import Kingfisher
class LightboxCollectionViewCell: UICollectionViewCell {
var media: Image?
// Sets the maximum zoom
let maxZoom: CGFloat = 10
@IBOutlet weak var background: UIView!
@IBOutlet weak var imageView: UIImageView!
func initialize(media: PostImage) {
self.media = media
if let thumbnailUrl = media.thumbnailUrl {
imageView.kf.setImage(with: URL(string: thumbnailUrl))
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Create pinch gesture recognizer to handle zooming
let pinch = UIPinchGestureRecognizer(target: self, action: #selector(self.pinchToZoom(sender:)))
self.imageView.addGestureRecognizer(pinch)
}
/**
Handles pinch zooming.
*/
@objc func pinchToZoom(sender: UIPinchGestureRecognizer) {
if sender.state == .began || sender.state == .changed {
let currentScale = self.imageView.frame.size.width / self.imageView.bounds.size.width
var newScale = currentScale * sender.scale
if newScale < 1 {
newScale = 1
}
if newScale > maxZoom {
newScale = maxZoom
}
let transform = CGAffineTransform(scaleX: newScale, y: newScale)
self.imageView.transform = transform
sender.scale = 1
}
}
}
Как вы можете видеть, в didEndDisplaying
, Я пытаюсь сбросить масштаб изображения, отображаемого в ячейке, потому что у меня есть функция, которая позволяет пользователю увеличивать изображение.Но по какой-то причине зум не сбрасывается, и я понятия не имею, почему.