0

私はいくつかの画像を含むコレクションビューを持っています。セル内の画像をズームすることはできますが、タップジェスチャーで元のサイズに戻すことができます。私のタップジェスチャーは元のサイズにイメージを復元しますが、画面から外れていて、スクロールビューはズームしたままです。ここに私のコードです:UIScroll UIImageViewピンチズーム後に元のサイズに復元する方法

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") 
} 
} 

答えて

0

これは私のために働いています。私はちょうど私が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 

} 
関連する問題