【问题标题】:UIScrollView how to restore to original size after UIImageView pinch zoomUIScrollView如何在UIImageView捏缩放后恢复到原始大小
【发布时间】:2017-11-04 13:51:07
【问题描述】:

我有一个包含多个图像的集合视图。我可以在单元格中缩放图像,但我希望它和滚动视图在点击手势时返回到其原始大小。我的点击手势将图像恢复到原来的大小,但它不在屏幕上,滚动视图保持它的缩放大小。这是我的代码:

import UIKit

class ZoomingCollectionViewCell: UICollectionViewCell, UIScrollViewDelegate {

let zoomScrollView: UIScrollView = {
    let scrollView = UIScrollView()
    scrollView.backgroundColor = .white
    scrollView.isUserInteractionEnabled = true
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.minimumZoomScale = 1.0
    scrollView.maximumZoomScale = 6.0
    scrollView.clipsToBounds = true
    return scrollView
}()

var itemImageView: UIImageView = {
    let imageView = UIImageView()
    imageView.contentMode = .scaleAspectFit 
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.backgroundColor = .white
    imageView.isUserInteractionEnabled = true
    return imageView
}()

var originalSize: CGRect!

override init(frame: CGRect) {
    super.init(frame: frame)

    contentView.backgroundColor = .white

    zoomScrollView.delegate = self

    itemImageView.frame = CGRect(x: 0, y: 0, width: contentView.frame.size.width, height: contentView.frame.size.height)

    zoomScrollView.frame = itemImageView.frame

    originalSize = itemImageView.frame

    let tap = UITapGestureRecognizer(target: self, action: #selector(tapZoomingGesture(_:)))

    tap.numberOfTapsRequired = 2

    zoomScrollView.addGestureRecognizer(tap)

    zoomScrollView.addSubview(itemImageView)

    contentView.addSubview(zoomScrollView)
}

func viewForZooming(in zoomScrollView: UIScrollView) -> UIView? {

    return itemImageView
}

func tapZoomingGesture(_ sender: UIPinchGestureRecognizer) {

    itemImageView.center = itemImageView.superview!.center

    itemImageView.transform = .identity

    zoomScrollView.frame = originalSize
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    return true
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

【问题讨论】:

    标签: ios swift3 uiscrollview uicollectionviewcell uiscrollviewdelegate


    【解决方案1】:

    这对我有用。我刚刚注意到我使用UIPinchGestureRecognizer 作为发件人,但由于某种原因它仍然有效。

    func tapZoomingGesture(_ sender: UIPinchGestureRecognizer) {
    
        let newZoomScale: CGFloat = 1.0000001
    
        let scrollViewSize = zoomScrollView.bounds.size
    
        let w = (scrollViewSize.width / newZoomScale)
        let h = (scrollViewSize.height / newZoomScale)
        let x = w / 6.0
        let y = h / 6.0
    
        let rectToZoomTo = CGRect(x, y, w, h)
    
        zoomScrollView.zoom(to: rectToZoomTo, animated: true)
    
        zoomScrollView.frame = itemImageView.frame
    
        itemImageView.center = zoomScrollView.center
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-24
      • 1970-01-01
      • 2017-09-23
      • 2016-06-09
      • 1970-01-01
      • 2023-04-11
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多