Ограничить uipageviewcontroller (с TransitionStyleScroll) жест панорамирования в определенной области

в моем приложении у меня есть RootPageViewController, который содержит UIPageViewController и один или несколько DetailPageViewController с UITableView в качестве дочернего представления.

                          DetailPageViewController
                        / 
RootPageViewController  - DetailPageViewController
                        
                          DetailPageViewController

поверх каждого DetailPageViewController есть небольшое пространство, где можно провести и добраться до следующего DetailPageViewController.

 ------------------- 
|                   |
|                   |  -> UIPageViewController should respond to pan's
|                   |
|-------------------|   --------------------------------------------
|  CellContent      |  
|-------------------|
|  CellContent      |
|-------------------|  -> UIPageViewController should disable UIPageViewController pan's
|  CellContent      |
|-------------------|
|  ...              |

в приложении iOS 7 weather есть scrollview со всем слабым прогнозом, который каким-то образом перезаписывает или отключает панель UIPageViewController.

Как я могу воссоздать такое поведение ?

извините за недостающие скриншоты

2 ответов


Я делаю это путем подкласса UIPageViewController, находя его UIScrollView (iterate self.subviews) и добавление нового UIPanGestureRecognizer в этот scrollView.

Я установил свой подкласс UIPageViewController в качестве делегата этого нового UIPanGestureRegognizer. Затем я реализую два метода делегата:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
  return NO;
}

и

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

Я решаю, хочу ли я " съесть событие "(ответ ДА) или если я хочу оригинальный UIPanGestureViewRecognizer UIScrollView для его обработки (ответ нет). Таким образом, YES-reply означает, что UIPageViewController не будет прокручиваться до следующего ViewController.


мое решение в Swift:

let myview = UIView(frame: CGRect(x:0, y:0, width:320, height:320))
//dummy view that defines the area where the gesture works
self.view.addSubview(myview)

for x in self.pageViewController!.view.subviews 
{ if x is UIScrollView
  { myview.addGestureRecognizer(x.panGestureRecognizer) } 
}