2012-02-04 5 views
6

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

[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 появляться (SlideView это Scrollview) .И тогда я добавить pangesturerecognizer.All работает отлично, но прокрутка отключена. (panImage снова скрывает мое слайд-шоу.) Как сделать прокрутку.

[slideView addGestureRecognizer:panImage]; 

ответ

12

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

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

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

+1

Вы должны признать несколько жесты одновременно, но вам также необходимо отключить прокрутку во время обработки вашего жеста. См. @ Мирослав. – SwiftArchitect

2

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

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

1

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 
} 
Смежные вопросы