Надеюсь, кто-то может помочь с этой проблемой. У меня есть класс, полученный из UIScrollView, и я бы хотел, чтобы пользователь не мог масштабировать или прокручивать с помощью ручного нажатия на клавиши и салфетки. Вместо этого вся навигационная система просмотра будет управляться программными средствами в ответ на то, где пользователь нажимает (подумайте об устройстве чтения электронных книг, где нажатие на левую или правую сторону дисплея заставляет просмотр прокручиваться ровно на одну ширину страницы). Любые предложения о том, как это реализовать?Как предотвратить ручное масштабирование в UIScrollView
ответ
Я не слишком много опыта UIScrollView
с, но, глядя на документы, это выглядит, как вы можете установить maximumZoomScale
, minimumZoomScale
и scrollEnabled
отключить все, что вы хотите отключить.
Вот документы: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html
Из документов:
scrollEnabled
:
Если значение этого свойства YES, прокрутка включена, и если это не , прокрутка отключена. Значение по умолчанию - ДА.
Когда прокрутка отключена, прокрутка вид не принимает события касания; он направляет их на цепочку ответчиков.
maximumZoomScale
:
Это значение определяет, насколько большой содержание может быть расширена. Он должен быть больше минимальной шкалы масштабирования для масштабирования для включения. Значение по умолчанию равно 1.0.
Чтобы предотвратить пользовательский контроллер масштабирования и панорамирования, но все же позволяют программным масштабирование и панорамирование в Scrollview, лучший подход, чтобы переопределить метод -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.I может плавно увеличивать и уменьшать на выбранную области, просто устанавливая границы представления в область, которую я хочу отобразить.
Как вы узнаете, что Apple всегда будет использовать здесь UIPinchGestureRecognizer? разве это не является неопределенным способом достижения цели? –
На вашем - (void)viewDidLoad;
вы сможете просто отключить любой распознаватель жестов, который вы хотите.В этом случае:
UIPinchGestureRecognizer *pinchRecognizer = self.pinchGestureRecognizer;
pinchRecognizer.enabled = NO;
или
UIPanGestureRecognizer *panRecognizer = self.scrollView.panGestureRecognizer;
panRecognizer.enabled = NO;
Я иногда сделать это с контроллерами отображения, которые содержат UIScrollViews. Я просто нацеливаю вид прокрутки (self.scrollView.pinchGestureRecognizer
) и временно отключает жесты приложением. находится в определенном состоянии.
«UIPinchGestureRecognizer», по-видимому, включен внутри, устанавливая масштаб масштабирования. Отключите его * после *, установив их программно. –
Быстрая заметка здесь. Кажется, UIScrollView
's panGestureRecognizer
и pinchGestureRecognizer
оба включены при первом добавлении контроллера вида в окно.
В основном это означает, что установка их enabled = NO
в viewDidLoad
не будет работать в некоторых случаях. Я переместил enabled = NO
в viewWillAppear:
, и он застрял. :)
В вашем UIScrollView подкласса перезаписать также setZoomScale: метод, который автоматически повторно отключает этот жест
- (void)setZoomScale:(CGFloat)zoomScale {
[super setZoomScale:zoomScale];
self.pinchGestureRecognizer.enabled = NO;
}
- 1. Android: ручное масштабирование вида
- 2. Как отслеживать масштабирование UIScrollView?
- 3. Масштабирование UIImage в UIScrollView
- 4. UIImageView и масштабирование UIScrollView
- 5. UIScrollView с subView Масштабирование
- 6. UIScrollView, скользящий, масштабирование
- 7. UIScrollView масштабирование и панорамирование
- 8. Масштабирование с CATiledLayer в UIScrollView
- 9. UIImageView в UIScrollView, масштабирование jittery
- 10. Масштабирование нескольких подзонов в UIScrollView
- 11. Как я могу отменить масштабирование масштабирования UIScrollView?
- 12. Как реализовать масштабирование изображения в UIScrollView?
- 13. Как предотвратить масштабирование изображения Graphics.DrawImage?
- 14. Как предотвратить масштабирование веб-страницы
- 15. UIScrollView масштабирование только размер UIImageView
- 16. Масштабирование в UIScrollView с другим UIScrollView в качестве содержимого
- 17. Предотвратить масштабирование кросс-браузера
- 18. UIScrollView масштабирование с представлением -ve
- 19. Back-to-back UIScrollView масштабирование
- 20. CSS - предотвратить масштабирование изображения?
- 21. Как сделать масштабирование UIScrollView до размера UIImage?
- 22. Как предотвратить масштабирование в Android Imageview?
- 23. Масштабирование в UIScrollView не является гладким
- 24. Dygraphs: как использовать селектор диапазонов и ручное масштабирование
- 25. Прокрутка и масштабирование UIImageView в UIScrollView
- 26. Масштабирование UIImageView в UIScrollView выходит за границы
- 27. Масштабирование в UIScrollView к специальному сердечнику (IPAD)
- 28. Как предотвратить прокрутку определенного объекта в UIScrollView
- 29. Как предотвратить левое правое панорамирование в UIScrollView
- 30. Масштабирование UIImageView в UIScrollView действует странно
Я в конечном итоге обнаружить это лучше всего сделать наследованием Scrollview, и заменяя метод, который крепит Жест Распознаватель представления. Перехватывая это, вы можете проверить класс прикрепляемого распознавателя жестов и заблокировать распознаватели жестов и поворота. Для кода, который я писал, я хотел, чтобы обычные жесты и жесты не работали, так что навигация была исключительно под программным контролем. Я просто устанавливаю унаследованный подкласс, чтобы никогда не добавлять распознаватели жестов, а затем мой код воздействовал на события касания, полученные подзапросом scrollview. – Shinohara
Привет, у вас есть пример этого кода? Благодаря! –