我想重新创建iOS Gallery App,所以我有两个视图控制器,第一个显示所有可用的图像,当选择一个图像时,然后显示另一个视图控制器中的另一个集合视图,制作了第二个vc集合视图的视图,其中每个单独的单元格全屏显示,因此您可以在所有可用图像之间滑动(就像在iOS Gallery App中一样)。问题是我无法将缩放添加到特定点每个单独单元格中显示的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
}
}
每个单元格覆盖整个屏幕,因此,当用户在第一个vc中点击图像时,第二个vc会完整显示该图像。该图像链接到处理所有缩放和平移功能的自定义单元格类。但是,当我缩放时,它只缩放到图像的中心,我希望它能够缩放到图像视图的任何部分,并且用户希望可以“导航”图像视图,就像在iOS画廊中一样应用
我的项目可以在以下链接中找到 https://github.com/francisc112/Gallery-Test
预先感谢