2012-05-03 8 views
6

Desidero che la navigazione Orientation del mio UIPageViewController cambi quando cambio l'orientamento del mio UIViewController. Cioè, quando il dispositivo viene ruotato in verticale, voglio che lo navigationOrientation cambi da UIPageViewControllerNavigationOrientationVertical a UIPageViewControllerNavigationOrientationHorizontal.iPad: UIPageViewController navigationOrientation

Ho provato a impostare la proprietà navigationOrientation sulla rotazione del controller di visualizzazione ma ho trovato che la proprietà navigationOrientation è di sola lettura.

Ecco le immagini quello che voglio.

Paesaggio vista Landscape View

vista del ritratto enter image description here

Cosa devo fare?

+0

Usa dovrebbe usare l'AutoResize in XI ter. – vishiphone

+0

@vishiphone: come autorizzare potrebbe aiutare il suo problema? Hai capito che vuole dividere la pagina per passare da verticale a orizzontale? –

+0

@ParthBhatt Penso che voglia solo ruotare l'orientamento della Vista perché la sua immagine e la sua domanda sono solo quelle. – vishiphone

risposta

3

Buona domanda.

Non so perché, ma sembra che Apple non voglia che tu cambi quella proprietà. O ragioni tecniche o qualche tipo di linea guida UI.

In ogni caso, se non è possibile modificare l'orientamento che si dovrebbe andare con un approccio diverso e utilizzare dueUIPageViewControllers, ciascuna con un altro orientamento di navigazione, che condividono un delegato. Sul dispositivo, tieni nascosti/mostra le visualizzazioni corrispondenti o inizi/rilasci un nuovo oggetto per ogni turno di dispositivo.

BTW. Hai dato un'occhiata al metodo pageViewController:spineLocationForInterfaceOrientation: del delegato. Sembra come se modo preferito di Apple di reagire all'orientamento dispositivo cambia è questo:

Discussione Utilizzare questo metodo per modificare la posizione della colonna vertebrale quando cambia l'orientamento dispositivo, nonché di creare nuovi vista controllori e mutevoli lo stato a doppia faccia.

Questo metodo viene chiamato solo se lo stile di transizione è UIPageViewControllerTransitionStylePageCurl.

Si noti che l'app di calendario di Apple con pagine molto sottili in verticale - sembra davvero la loro idea di interfaccia utente.

+0

Sì, la visualizzazione del calendario Apple può essere eseguita rimuovendo "if (UIInterfaceOrientationIsPortrait (orientation))" –

+0

Non so esattamente cosa intendi, ma l'app calendario ** fa * * reagisce al cambio di orientamento del dispositivo. Cambia la vista (controller) per ogni pagina quando il dispositivo gira.Puoi vederlo dalla panoramica mensile che passa dalla pagina sinistra a quella destra. –

+0

@Devang Ciao Devang, ho bisogno di qualcosa di simile alla tua richiesta. Quello che sto facendo è che sto avendo cinque controller di vista aggiunti in serie e usando il controller di visualizzazione di pagina per mostrare due viste sullo schermo alla volta come hai fatto nella prima immagine. Sto avendo la vista panoramica fissa per la mia app. Quello che voglio è dopo aver mostrato quattro controller di visualizzazione che mostrerà il controller a vista singola in orizzontale. Puoi guidarmi per quello, la mia funzionalità di riposo è fatta solo questa parte non ho ancora potuto risolvere. –

0

risolvo questo problema in un modo leggermente diverso, ho ereditato classe UIPageViewController e sovrascrivere l'initWithCoder come segue:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    NSDictionary *options = nil; 

    if ([self isLandscapeOrientation]) 
    { 
     options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMid] forKey:UIPageViewControllerOptionSpineLocationKey]; 
    } 

    self = [super initWithCoder:aDecoder]; 

    return [super initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options]; 
} 

- (BOOL)isLandscapeOrientation 
{ 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

    return UIInterfaceOrientationIsLandscape(orientation); 
} 
Problemi correlati