Ограничить 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) }
}