Во-первых, создайте подкласс UIScrollView, чтобы можно было изменить стандартное поведение представления прокрутки.
Во-вторых, создайте изображение с вашим изображением и поместите и изображение, и изображение маски в представление с прокруткой, чтобы ваши представления находились под индикатором прокрутки.
В-третьих, в вашем методе делегата с представлением прокрутки viewForZoomingInScrollView: , верните представление вашего изображения, так что только изображение будет увеличено. Обратите внимание, что представление прокрутки будет регулировать размер содержимого в соответствии с размером возвращенного представления, но это нормально, если ваше представление изображения занимает весь размер содержимого.
И, наконец, переопределите метод layoutSubviews, переместите представление маски к видимым границам представления прокрутки. Считается, что метод layoutSubviews вызывается при каждом кадре прокрутки, поэтому изменение положения не будет видно конечному пользователю.
Для получения более подробной информации вы можете обратиться к видео сеанса WWDC "Расширенные методы ScrollView".
РЕДАКТИРОВАТЬ: ОК, только что обнаружил, что вы можете избежать переопределения layoutSubviews путем реализации метода делегата scrollViewDidScroll.