Передайте UIPanGestureRecognizer из одного представления для обработки другим представлением - PullRequest
3 голосов
/ 09 февраля 2012

Я использую UIPageViewContoller для создания книжного перелистывания страниц.Страницы моей книги на 18px уже всей ширины экрана iPhone и закреплены на левой стороне экрана.Рамка для представления моего UIPageViewController затем устанавливается на размер рамки этих страниц (ширина: 302, высота: 460).Я делаю это для того, чтобы в книге было несколько страниц, а поворот страницы должен выглядеть так, как будто она начинается с края текущей видимой страницы, точно так же, как в приложении iBooks.

Проблема, которую яу меня есть, если кто-то пытается перевернуть страницу с помощью панорамирования в крайнем правом углу экрана, после точки 302 пикселей, жест панорамирования не захватывается UIPageViewController и страница не переворачивается.Я видел, как многие пользователи пытались перевернуть страницу таким образом, поэтому я хотел бы исправить это, не меняя дизайн пользовательского интерфейса.

Я думаю, что я могу захватить UIPanGesture из области за пределами UIPageViewController.и передать его в UIPageViewController.Я успешно запечатлел жест панорамирования, используя вид изображения, который у меня есть в качестве фона всего вида, но я не могу понять, как передать жест в UIPageViewController для обработки поворота страницы.

- (void) viewDidLoad {
...    

    // Add a swipe gesture recognizer to grab page flip swipes that start from the far right of the screen, past the edge of the book page
    self.panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:nil] autorelease];
    [self.panGesture setDelegate:self];
    [self.iv_background addGestureRecognizer:self.panGesture];

    //enable gesture events on the background image
    [self.iv_background setUserInteractionEnabled:YES];

...
}


#pragma mark - UIGestureRecognizer Delegates
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // test if our control subview is on-screen
    if (self.pageController.view.superview != nil) {
       if (gestureRecognizer == self.panGesture) {
            // we touched background of the BookViewController, pass the pan to the UIPageViewController
            [self.pageController.view touchesBegan:[NSSet setWithObject:touch] withEvent:UIEventTypeTouches];

            return YES; // handle the touch
        }
    }
    return YES; // handle the touch
}

1 Ответ

3 голосов
/ 08 июня 2012

UIPageViewController имеет свойство gestRecognizers.Документация, кажется, точно описывает то, что вы ищете:

gestRecognizers

Массив объектов UIGestureRecognizer, которые настроены для обработки взаимодействия с пользователем.(только для чтения)

@ свойство (неатомное, только для чтения) NSArray * gestRecognizers

Обсуждение

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

Доступность

Доступно в iOS 5.0 и более поздних версиях.Объявлено в

UIPageViewController.h

...