Чтобы предотвратить масштабирование и панорамирование пользовательского контроллера, но при этом разрешить программное масштабирование и панорамирование просмотра прокрутки, наилучшим подходом является переопределение метода -addGestureRecognizer:
UIScrollView в подклассе.
В моем использовании я хотел заблокировать все распознаватели и полностью контролировать видимую область с моего контроллера представления, я сделал это так:
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
//Prevent any of the default panning and zooming controls from working
gestureRecognizer.enabled = NO;
[super addGestureRecognizer:gestureRecognizer];
}
Каждый распознаватель жестов просто отключен, для более точного управления (позволяя управлять панорамированием, но разрешать, например, масштабирование только двойным касанием), вы просто проверяете распознаватель входящих жестов с помощью -isKindOfClass:
и отключаете его соответствующим образом.
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
//Prevent zooming but not panning
if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) {
gestureRecognizer.enabled = NO;
}
[super addGestureRecognizer:gestureRecognizer];
}
Я использовал этот метод в приложении для чтения комиксов, которое использует управляемую навигацию для анимации между обрезанными панелями на странице с полной страницей, содержащейся в UIScrollView. Я могу плавно увеличивать и уменьшать масштаб выбранной области, просто устанавливая вид границы области, которую я хочу отобразить.