2012-03-21 3 views
3

J'ai un UIPageViewController avec plusieurs pages. Chaque page est le même contrôleur de vue, mais le numéro de page est suivi et la page correcte d'un PDF est affichée. Le problème est que chaque page PDF doit être chargée et dessinée avant que l'effet de bouclage ne fonctionne (vous faites glisser votre doigt sur l'écran et rien ne se passe jusqu'à ce qu'il soit chargé). Des idées sur la façon d'accélérer ou de précharger la page suivante? Merci de votre aide.Accélérer UIPageViewController

Répondre

6

J'ai un problème similaire dans l'application que j'utilise maintenant. Ma solution était de conserver une référence aux contrôleurs précédents et suivants chargés en tant que propriétés de mon contrôleur de vue racine, puis de charger la vue à partir de là. Je n'utilise pas PageViewController parce que le client a insisté pour que ait pour ressembler à FlipBoard ... donc je cache aussi le GLTexture résultant. Cela devrait fonctionner de la même manière, il suffit de stocker la page suivante et la page précédente lorsque la version actuelle est chargée, et de passer ce contrôleur dans votre "loadNextPage" ou toute autre méthode.

EDIT: Voici un échantillon (que j'ai simplifié) de mon projet

première charge (NH est un préfixe pour mon programme, vous aurez donc besoin de remplacer vos propres classes):

NHViewController *child = [NHViewController loadPageNum:actualNum]; 
[self.view addSubview:child.view]; 
self.curController = child; 
child.delegate = self; 
[self initializePages:NHPageLoadBoth]; 

Les charges suivantes (page flip):

NHPageLoadSettings pageToLoad = NHPageLoadNext; 
    if(direction == NHPageDirectionNextPage) 
    { 
     self.prevController = self.curController; 
     self.curController = self.nextController; 
     self.nextController = nil; 
    } 
    else 
    { 
     self.nextController = self.curController; 
     self.curController = self.prevController; 
     self.prevController = nil; 
     pageToLoad = NHPageLoadPrev; 
    } 

    UIView *nextView = self.curController.view; 
    [self.view addSubview:nextView]; 
    [mCurView removeFromSuperview]; 
    mCurView = nextView; 

    [self initializePages:pageToLoad]; 

Initialiser Pages:

- (void)initializePages:(NHPageLoadSettings)pagesToLoad 
{ 
    if(pagesToLoad & NHPageLoadNext) 
    { 
     NSUInteger nextPageNum = [self.curController.pageNum unsignedIntegerValue]+1; 
     self.nextController = [NHViewController loadPageNum:nextPageNum]; 
    } 
    if(pagesToLoad & NHPageLoadPrev) 
    { 
     NSUInteger prevPageNum = [self.curController.pageNum unsignedIntegerValue]-1; 
     self.prevController = [NHViewController loadPageNum:prevPageNum]; 
    } 
} 

De cette façon, vous aurez toujours les pages de voisins prêtes. Alors au lieu de les instancier dans la méthode qui récupère la page suivante ou précédente dans UIPageViewController, il suffit de passer self.nextController, ou self.prevController.

+0

Oui, c'est ce que je pensais. COMMENT pourrais-je charger la page suivante? Pouvez-vous me donner un échantillon de code rapide? Merci de votre aide! –

+0

J'ai édité la réponse ci-dessus avec un échantillon ... j'espère que vous pouvez l'appliquer à votre projet – borrrden

+0

Merci beaucoup l'homme! –