5
votes

I have an UIView and add an UIScrollView to it. Inside the scrollView is an UIImageView.
I want to zoom the image view by pressing a button. If the image view is zoomed you should be able to scroll but that's not working.

Currently I have that:

self.imageView = UIImageView()
self.imageView.image = image
self.imageView.frame = self.contentView.bounds

self.scrollView = UIScrollView()
self.scrollView.frame = self.contentView.bounds
self.scrollView.contentSize = self.contentView.bounds.size
self.scrollView.addSubview(self.imageView)

self.contentView.addSubview(self.scrollView)

and that:

@IBAction func zoomPicture() {
    if (scale <= 1.5) {
        scale = scale + 0.1
        scrollView.transform = CGAffineTransformMakeScale(scale, scale)
        scrollView.zoomScale = scale
        scrollView.maximumZoomScale = 1.5
        scrollView.minimumZoomScale = 1.0
        scrollView.contentSize = contentView.bounds.size
        scrollView.scrollEnabled = true
    }
}

my class also implements UIScrollViewDelegateand I set the delegate in the viewDidLoad() function. I have also added the viewForZoomingInScrollView function. The zoom works but I can't scroll.

2
Try to set self.scrollView.contentSize bigger than self.contentView.boundsAshish Thakkar
Nice, works! Does it matter how much the content size is bigger or not?mafioso
I think you answer in this link, stackoverflow.com/questions/11318845/…Keyur Hirani
@mafioso yes it matters and always try to set content size bigger, why this happens, is in answer i posted below.Ashish Thakkar

2 Answers

8
votes

For this issue you have to set self.scrollView.contentSize bigger than self.contentView.bounds so it get proper space to scroll.

replace this line

self.scrollView.contentSize = self.contentView.bounds.size

to this:

self.scrollView.contentSize = self.contentView.bounds.size*2 //or what ever size you want to set
0
votes

Try this:

@IBAction func zoomPicture() {
    if (scale <= 1.5) {
        scale = scale + 0.1
        scrollView.zoomScale = scale
        scrollView.maximumZoomScale = 1.5
        scrollView.minimumZoomScale = 1.0
        let size = contentView.bounds.size
        scrollView.contentSize = CGSize(width: size.width * scale, height: size.height * scale)
        scrollView.scrollEnabled = true
    }
}