Sto passando alle presentazioni basate su UIPresentationController
per i miei controller di visualizzazione ma ho incontrato qualche confusione con l'API.Adaptive UIPresentationController basato sulla dimensione della vista
Ho una presentazione del controller della vista in stile barra laterale personalizzata (simile al codice demo LookInside
WWDC 2014).
Questa classe di cluster (UIPresentationController
, UIViewControllerTransitioningDelegate
e UIViewControllerAnimatedTransitioning
) presenta un controller vista come una barra laterale dal bordo dello schermo in vista regolari classi di dimensione, e presenta la stessa vista controllore come schermo sul visualizzazioni classe dimensioni compatte.
Il test su questo target iPad ridimensionabile mostra il comportamento corretto: ho impostato la classe di dimensione orizzontale su "Compatta" e il mio controller di visualizzazione passa da barra laterale a schermo intero.
Tuttavia, voglio più granularità. Vorrei utilizzare la presentazione del controller di visualizzazione in stile sidebar su iPhone 6 e 6+ quando il dispositivo è in orientamento orizzontale e utilizzare la presentazione in stile a schermo intero per tutti gli iPhone con orientamento verticale.
Così nel mio metodo
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
ho implementato una logica per rilevare se la barra laterale occuperà troppo dello schermo, diciamo che io uso la seguente condizione:
//If my sidebar is going to occupy more than half the new width of the view...
if(self.sidebarTransitionController.width > size.width/2.0)
{
//Override the presentation controller's trait collection with Compact horizontal size class
sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
}
else
{
//Otherwise override the trait collection with Regular
sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
}
Tuttavia questo non fa Niente. La documentazione per gli stati UIPresentationController.overrideTraitCollection
:
Utilizzare questa proprietà per specificare i tratti che si desidera applicare ai controller di vista presentati e presentati. I tratti specificati sostituiscono eventuali tratti esistenti attualmente in vigore per i controller della vista. Il valore predefinito di questa proprietà è nullo.
Assegnare un nuovo valore a questa proprietà fa sì che il controller di presentazione passi al nuovo set di tratti, il che potrebbe comportare animazioni all'interfaccia presentata.
Assegnare il nuovo valore al controller di presentazione non causa in alcun modo la modifica dell'interfaccia presentata. (Anche se assegno lo quando viene creato looggetto.)
Cosa mi manca? È possibile eseguire una presentazione adattiva con UIPresentationController
a un livello più granulare?