Gest UIPageViewController wywołuje viewControllerAfter: ale nie animuje

Mam naprawdę ciekawy problem z UIPageViewController.

Mój projekt jest bardzo podobny do przykładowego szablonu aplikacji opartej na stronie. Co jakiś czas (ale do pewnego stopnia odtwarzalny) wywoła się pewien gest pan-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController.

Zwracam kontroler widoku dla następnej strony, ale animacja przerzucania strony nigdy nie jest uruchamiana, a moja metoda delegowania nigdy nie jest wywoływana.

Oto kod dlaviewControllerAfterViewController

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    PageDisplayViewController *vc = (PageDisplayViewController *)viewController;
    NSUInteger index = [self.pageFetchController.fetchedObjects indexOfObject:vc.page];
    if(index == (self.pageFetchController.fetchedObjects.count - 1)) return nil;
    return [self getViewControllerForIndex:(++index)];
}

Tutaj jestgetViewControllerForIndex:

-(PageDisplayViewController *)getViewControllerForIndex:(NSUInteger)index
{
    PageDisplayViewController *newVC = [self.storyboard instantiateViewControllerWithIdentifier:@"PageDisplayController"];
    newVC.page = [self.pageFetchController.fetchedObjects objectAtIndex:(index)];
    newVC.view.frame = CGRectMake(0, 0, 1024, 604);
    NSLog(@"%i", index);
    if(index == 0)
    {
        //We're moving to the first, animate the back button to be hidden.
        [UIView animateWithDuration:0.5 animations:^
        {
            self.backButton.alpha = 0.f;
        } completion:^(BOOL finished){
            self.backButton.hidden = YES;
        }];
    }
    else if(index == (self.pageFetchController.fetchedObjects.count - 1))
    {
        [UIView animateWithDuration:0.5 animations:^{
            self.nextButton.alpha = 0.f;
        } completion:^(BOOL finished){
            self.nextButton.hidden = YES;
        }];
    }
    else
    {
        BOOL eitherIsHidden = self.nextButton.hidden || self.backButton.hidden;
        if(eitherIsHidden)
        {
            [UIView animateWithDuration:0.5 animations:^{
                if(self.nextButton.hidden)
                {
                    self.nextButton.hidden = NO;
                    self.nextButton.alpha = 1.f;
                }
                if(self.backButton.hidden)
                {
                    self.backButton.hidden = NO;
                    self.backButton.alpha = 1.f;
                }
            }];
        }
    }
    return newVC;
}

Zasadniczo tworzę kontroler widoku, ustawiamy jego obiekt danych, a następnie wyciszam przycisk następny / wstecz w zależności od indeksu.

Metoda delegowania

-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
    PageDisplayViewController *vc = [previousViewControllers lastObject];
    NSUInteger index = [self.pageFetchController.fetchedObjects indexOfObject:vc.page];

    if (!completed)
    {
        [self.pagePreviewView setCurrentIndex:index];
        NSLog(@"Animation Did not complete, reverting pagepreview");
    }
    else
    {
        PageDisplayViewController *curr = [pageViewController.viewControllers lastObject];
        NSUInteger i = [self.pageFetchController.fetchedObjects indexOfObject:curr.page];
        [self.pagePreviewView setCurrentIndex:i];
        NSLog(@"Animation compeleted, updating pagepreview. Index: %u", i);
    }
}

Zauważyłem ten problem tylko dlatego, że losowo mój przycisk na plecach pojawił się ponownie na ekranie. Po podrzuceniuNSLog() stwierdzenia, zauważyłem, że moja metoda dataSource jest wywoływana dla indeksu 1, ale żadna animacja nigdy nie jest odtwarzana ani wywoływana. Co jeszcze bardziej przerażające, jest to, że jeśli spróbuję przesuwać następną stronę, indeks 1 zostanie wywołany PONOWNIE.

Obawiam się, że może to być błąd w sterowniku UIPageViewController.

questionAnswers(4)

yourAnswerToTheQuestion