Domanda

Questo è solo un esempio del problema di base che sto riscontrando, quindi non preoccuparti se questa situazione sembra un po 'inutile;)

Diciamo che ho un'app che è principalmente un UINavigationController a soli due livelli di profondità. Il livello superiore è una tabella con un elenco di nomi di file di immagini e il secondo livello ha solo un UIImageView che mostra l'immagine per il nome del file che hai toccato.

Per un'app come questa, qualcuno conosce un buon modo per consentire alla tabella di livello superiore di autorotarsi mantenendo il secondo livello di immagini fisso in modalità verticale?

Finora sono stato quasi in grado di arrivarci ... ma quando tocco un nome di file mentre è in modalità orizzontale, l'immagine viene visualizzata con l'orientamento errato anche se il controller della vista di secondo livello dovrebbeAutorotateToInterfaceOrientation restituisce sì solo per il ritratto le modalità.

È stato utile?

Soluzione

Il problema è che se si utilizza la rotazione automatica l'intera UI (inclusa l'istanza di UIWindow credo) sia ruotata.

Tutto ciò che viene spinto sul controller di navigazione a questo punto verrà fatto in orizzontale.

Quindi quando spingi l'immagine visualizzata, è esattamente quello che ottieni.

Per farlo funzionare, devi:

  1. Gestisce la rotazione della vista radice manualmente (usando una trasformazione)
  2. Annulla la rotazione della vista immagine di -PI / 2 usando una trasformazione.

In entrambi i casi è necessario eseguire manualmente le trasformazioni per farlo funzionare.

Come nota a margine, questa potrebbe essere una cattiva progettazione dell'interfaccia utente. Come utente, mi sarei aspettato mentre eseguivo il drill down per visualizzare le immagini a destra. Ma questo è senza conoscere il contesto esatto della tua app.

Altri suggerimenti

Non c'era un buon modo per farlo in iPhone OS 2.x, ma in 3.0 l'hanno notevolmente migliorato.

In 2.x, il shouldAutorotateToInterfaceOrientation: è stato obbedito al metodo delegato solo per modifiche all'orientamento, quindi otterrai il comportamento che descrivi: se fosse ruotato in un altro controller di visualizzazione, rimarrebbe ruotato tramite push e pop anche se il nuovo controller di visualizzazione non supportava la rotazione in tale orientamento.

In 3.0, UINavigationController esegue il polling shouldAutorotateToInterfaceOrientation: su ogni push o pop e obbedisce a ciò che restituisce come ti aspetteresti, ad esempio: se sei attualmente ruotato nell'orientamento Orizzontale sinistro e spingi un'istanza di un controller di visualizzazione che supporta l'orientamento verticale solo tramite shouldAutorotateToInterfaceOrientation: , inverte automaticamente e istantaneamente l'orientamento logico e scorre nella nuova vista nel modo corretto nell'orientamento verticale.

Nota che funzionerà solo su applicazioni collegate (e quindi che richiedono) 3.0. Per le applicazioni collegate a 2.x, emulerà il vecchio comportamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top