Нарисуйте путь над UIPageViewController

Сейчас я создаю приложение для детей. Это приложение использует «UIPageViewController». Дети могут рисовать линии внутри страниц, перетаскивая их пальцами.

Проблема в том, что при перетаскивании над страницей эта страница переворачивается: как я могу отключить действие перелистывания страниц из определенного региона, чтобы дети могли рисовать там линии?


person user2454061    schedule 06.06.2013    source источник
comment
Зачем вообще нужен UIPageViewController? Разве вы не можете использовать обычный UIViewController и самостоятельно позаботиться о подкачке с помощью UIGestureRecognizers, добавленных в соответствующих местах?   -  person TheEye    schedule 06.06.2013


Ответы (1)


Добавить тап UITapGestureRecognizer в viewDidLoad

/** add gesture recognizier */
UITapGestureRecognizer *singleTap =[[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
singleTap.numberOfTouchesRequired = 1;
singleTap.cancelsTouchesInView    = NO;
singleTap.delegate                = self;
[_pageController.view addGestureRecognizer:singleTap];
[singleTap release];

поймать метод делегата UITapGestureRecognizer.

/** recognized tap on pageviewcontroller */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:    (UITouch *)touch
{
    CGPoint touchPoint   = [touch locationInView:self.view];
    /** detect screen resolution */
    CGRect  screenBounds = [UIScreen mainScreen].bounds;

    if(touchPoint.x > (screenBounds.size.width *0.15) && touchPoint.x <     (screenBounds.size.width *0.75))
    {
        /** tap is on center */
        canScroll = NO;
    } else {
        /** tap is on corners */
        canScroll = YES;
    }

    /** detect the tap view */
    UIView *view = [self.view hitTest:touchPoint withEvent:nil];
    if([view isKindOfClass:[UIButton class]])
    {
        canScroll = NO;
    }

    return NO;
}

Переопределить методы источника данных UIPageViewController

/** move to previous page */
- (UIViewController *) pageViewController: (UIPageViewController *)pageViewController     viewControllerBeforeViewController:(UIViewController *)viewController
{
    if(canScroll)
    {
        return _prevPageViewController;
    }
    return  nil;
}

/** move to next page */
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
{
    if(canScroll)
    { 
        return _nextPageViewController;
    }
    return nil;
}
person Jabson    schedule 06.06.2013