Iphone – How to programmatically zoom a UIScrollView

cocoa-touchiphone

I'd like to zoom and unzoom in ways the base class doesn't support.

For instance, upon receiving a double tap.

Best Solution

I'm answering my own question, after playing with things and getting it working.

Apple has a very-simple example of this in their documentation on how to handle double taps.

The basic approach to doing programmatic zooms is to do it yourself, and then tell the UIScrollView that you did it.

  • Adjust the internal view's frame and bounds.
  • Mark the internal view as needing display.
  • Tell the UIScrollView about the new content size.
  • Calculate the portion of your internal view that should be displayed after the zoom, and have the UIScrollView pan to that location.

Also key: once you tell the UIScrollView about your new contents size it seems to reset its concept of the current zoom level. You are now at the new 1.0 zoom factor. So you'll almost certainly want to reset the minimum and maximum zoom factors.