Прокрутка отключается, когда я добавляю UIPangesturerecognizer в UIScrollView - PullRequest
6 голосов
/ 04 февраля 2012

У меня есть вид прокрутки, и я хочу, чтобы он исчезал при каждом панорамировании. Он работает нормально, и при панорамировании прокрутка исчезает, но проблема в том, что я не могу прокрутить содержимое.

[UIView animateWithDuration:0.2
                      delay:0.2
                    options: UIViewAnimationCurveLinear
                 animations:^{
                     slideView.frame=CGRectMake(268, 0, 500, 950);
                     curtain.frame=CGRectMake(0, 0, 268, 950);
                     curtain.backgroundColor=[[UIColor alloc]initWithRed:0 green:0 blue:0 alpha:0.6];
                     [self.view addSubview:slideView];
                    [self.view addSubview:curtain];

                 } 
                 completion:^(BOOL finished){
                     NSLog(@"Done!");
                 }];

Вот как я могу сделать так, чтобы мой uiscrollview отображался (слайд-просмотр - это scrollview). А затем я добавляю pangesturerecognizer. Все работает нормально, но прокрутка отключена. (panImage снова скрывает мой слайд-просмотр.) Как сделать прокрутку работает. ??

[slideView addGestureRecognizer:panImage];

Ответы [ 3 ]

12 голосов
/ 04 февраля 2012

UIScrollView имеет собственный распознаватель жестов панорамирования, который управляет прокруткой. Добавляя другой распознаватель жестов панорамирования, вы не позволяете работать собственному распознавателю жестов панорамирования в представлении прокрутки.

Есть несколько способов справиться с этим, но было бы полезно, если бы вы могли объяснить, как система должна знать, когда пользователь пытается отключить представление прокрутки и когда он пытается прокрутить, так как Вы хотите, чтобы жест панорамирования делал оба.

Например, вы можете настроить делегатов обоих распознавателей жестов так, чтобы они могли работать одновременно (переопределив метод gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:). Вы можете сделать так, чтобы каждый распознаватель жестов требовал различного количества касаний (установив свойства minimumNumberOfTouches и maximumNumberOfTouches). Вы можете использовать UISwipeGestureRecognizer, чтобы распознать жест отклонения. Вы можете определить, когда пользователь пытается прокрутить за левый край представления прокрутки, переопределив метод scrollViewDidScroll: делегата представления прокрутки.

2 голосов
/ 21 января 2013

Вы можете установить приоритеты ваших panGestureRecognizer вручную.Вот как я решил ту же проблему: в делегате (BOOL) gestRecognizerShouldBegin: я отключил прокрутку в моем scrollView, если он должен вернуть YES.И в начале селектора моего panGestureRecognizer я включил прокрутку.

В этом делегате вы можете создать условие вашего panGestureRecognizer для включения такого способа, что он будет работать тогда и только тогда, когда вы хотите, чтобы он имел главный приоритет.

1 голос
/ 27 января 2015

Метод Swift,
Необходимо добавить UIGestureRecognizerDelegate в ваш класс:

class ViewController: UIViewController, UIGestureRecognizerDelegate {

Необходимо установить его делегата на себя:

override func viewDidLoad() {
    super.viewDidLoad()
    var scrollView = UIScrollView(frame: self.view.frame)
    scrollView.delegate = self
}

Добавить эту часть в методы вашего классана активные одновременные жесты:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...