Я хочу воссоздать приложение Галерея iOS, поэтому у меня есть два контроллера вида, первый отображает все доступные изображения, и когда изображение выбрано, затем отображается другой вид коллекции в другом контроллере представления, этот второй виртуальный канал сделанпредставления коллекции, в котором каждая отдельная ячейка отображается в полноэкранном режиме, поэтому вы можете перемещаться между всеми доступными изображениями (как вы можете в приложении iOS Gallery). Проблема в том, что я не могу добавить масштабирование к определенной точкеImageView отображается в каждой отдельной ячейке.При масштабировании изображение увеличивается только по центру, поэтому я не могу «перемещаться» по изображению или увеличивать определенную часть изображения (скажем, масштабирование в левом углу изображения или около того).приложение iOS Gallery
class CollectionViewCell: UICollectionViewCell, UIScrollViewDelegate {
@IBOutlet weak var userImageView: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
returnOriginalSize()
let pinch = UIPinchGestureRecognizer(target: self, action: #selector(self.pinch(sender:)))
userImageView.addGestureRecognizer(pinch)
let tap = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
tap.numberOfTapsRequired = 2
userImageView.addGestureRecognizer(tap)
}
// Actions
@objc func pinch(sender:UIPinchGestureRecognizer) {
if sender.state == .began || sender.state == .changed {
let currentScale = self.userImageView.frame.size.width / self.userImageView.bounds.size.width
let newScale = currentScale * sender.scale
let transform = CGAffineTransform(scaleX: newScale, y: newScale)
print("New scale is \(newScale)")
guard newScale >= 0.80 else {
UIView.animate(withDuration: 0.3) {
self.userImageView.transform = CGAffineTransform.identity
}
return
}
self.userImageView.transform = transform
sender.scale = 1
}
}
@objc func doubleTapped(sender:UITapGestureRecognizer) {
print("Double Tapped")
UIView.animate(withDuration: 0.3) {
self.userImageView.transform = CGAffineTransform.identity
}
}
func returnOriginalSize(){
self.userImageView.transform = CGAffineTransform.identity
}
}
Каждая отдельная ячейка покрывает весь экран, поэтому, когда пользователь нажимает на изображение в первом виртуальном канале, второй виртуальный канал показывает это изображение целиком.Это изображение связано с пользовательским классом ячеек, который обрабатывает все функции масштабирования и панорамирования.Однако, когда я масштабирую, он только увеличивает масштаб изображения к центру, я хочу, чтобы он мог масштабировать любую часть вида изображения, а также чтобы пользователь мог «перемещаться» по виду изображения, как в галерее iOS.Приложение
Мой проект можно найти по следующей ссылке https://github.com/francisc112/Gallery-Test
Заранее спасибо