2013-07-11 2 views
1

Есть ли способ отключить все UIPanGestureRecognizer с сенсорными эффектами? Я надеюсь, что вы сможете изолировать все события касания до одного из моих подпрограмм, и каждый супервизор игнорирует все события касания, но я могу определить это только после touchesBegan:withEvent:.Отключить все UIPanGestureRecognizers после `touchhesBegan: withEvent:`

Можно ли отключить мой наблюдательный элемент UIPanGestureRecognizer s от взаимодействия с прикосновением после его срабатывания touchesBegan:withEvent:?

ответ

2

Чтобы отключить и повторно включить панорамирование во всех superviews, вы должны сделать что-то вроде этого:

- (void)recursivelyEnable:(BOOL)enable panGesturesInSuperview:(UIView *)superview 
{ 
    for(UIPanGestureRecognizer *recognizer in superview.gestureRecognizers) 
    { 
     if([superview isKindOfClass:[UIScrollView class]])[(UIScrollView *)superview setScrollEnabled:enable]; 
     else [recognizer setEnabled:enable]; 
    } 
    if(superview.superview)[self recursivelyEnable:enable panGesturesInSuperview:superview.superview]; 
} 

и использовать его так:

//Disable panning 
[self recursivelyEnable:NO panGesturesInSuperview:self.superview]; 

//Enable panning 
[self recursivelyEnable:YES panGesturesInSuperview:self.superview]; 

По какой-то причине вы не можете возиться с UIGestureRecognizer s UIScrollView или ny его подклассов; поэтому я включил проверку и альтернативу/включение панорамирования.

+0

Большое спасибо @RileyE решение действительно работает как магия. –

1

Да, используйте этот код:

yourGesture.enabled = NO; 
+0

Будет ли это работать после прикосновения? – RileyE

+0

Да, он должен. –

+0

Он не работает после того, как началось касание. – RileyE

Смежные вопросы