Я добавляю UIPanGestureRecognizer в одно пользовательское представление в моем контроллере представления.
Я также использую MFSideMenu для скользящего меню, которое в своей структуре добавляет UIPanGestureRecognizer к основному NavigationViewController.view.
Иногда, когда я панорамирую в своем пользовательском представлении, панорамирование фактически происходит в MavigationViewController.view.
Причиной этой проблемы является следующий код в реализации MFSideMenu:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
if([gestureRecognizer.view isEqual:self.rootViewController.view] &&
[self rootViewControllerPanEnabled])
{
return YES;
}
return NO;
}
}
По-видимому, иногда (1 из 5-10) этот метод возвращает ДА, тогда как он должен возвращать НЕТ при панорамировании самого вида!
Проблема в том, что вместо панорамирования пользовательского вида открывается скользящее меню.
Я перепробовал почти все, что только мог себе представить — такое поведение просто не имеет никакого смысла.
ОБНОВЛЕНИЕ: проблема только в iOS 7 - пожалуйста, смотрите мой ответ ниже для исправления.