2013-12-17 3 views
12

Con iOS 7 è stata creata una nuova animazione push, che fa scorrere il controller di visualizzazione spinto sopra la gerarchia. Ma quando l'animazione si verifica, iOS fa a quanto pare due cose di modificare il design del controller vista dall'alto:iOS 7 UINavigationController Push animazione shadow

Viene aggiunto un ombra:

A shadow of view controller when animating

E una sovrapposizione di luce sopra il controller di vista dal basso:

A light overlay

Nella maggior parte delle applicazioni questo non è un problema. Attualmente sto lavorando a un'applicazione con pixel perfect design e utilizzo i controller di visualizzazione con uno sfondo chiaro. Ma questa funzionalità rimane la stessa e la luce sovrapposta appare sul controller della vista. Poiché lo sfondo è una sfumatura bianca, questa leggera sovrapposizione (nella schermata 2) è molto visibile e al termine dell'animazione viene rimossa senza animazione, il che la rende molto evidente e fastidiosa.

Sono consapevole che posso creare animazioni personalizzate e transizioni, ma mi chiedo:

Esiste un modo per rimuovere (o modificare) la sovrapposizione luce e ombra, senza dover creare transizioni personalizzate?

Grazie per il vostro aiuto.

+0

sei riuscito a risolvere questo? –

+0

Non senza pesanti modifiche. – Legoless

+0

Hai provato a utilizzare le API di transizione del controller di visualizzazione personalizzata di iOS 7? objc.io/issue-5/view-controller-transitions.html – rounak

risposta

1

Non è la soluzione più elegante, ma ho visto persone usare le animazioni UIImage per mostrare ciò che vogliono mostrare. Quindi, si potrebbe:

  • Schermata l'entrata UIViewController
  • animare l'arrivo di un UIImageView
  • chiamata pushViewController:animated:, passando NO per animated:
  • Rimuovere il UIImageView
  • Anche in questo caso, un po ' di un trucco, ma forse è la soluzione migliore per il tuo scenario.

    +0

    Thx, buona idea! –

    1

    prova di questo proxy

    [[UIImageView appearanceWhenContainedIn:NSClassFromString(@"_UIParallaxDimmingView"), nil] setAlpha:0.0f]; 
    

    Non so se Apple permette questo o no perché utilizza un'API privato. Si aggiornerà quando l'app inviata.

    +0

    Questa soluzione funziona solo se non si dispone di altre visualizzazioni di immagine nella gerarchia del controller di navigazione ... quindi, non è molto utile. – patr1ck

    +0

    @ patr1ck È possibile creare sottoclassi UIImageView e utilizzare la sottoclasse ovunque sia necessario. Quindi puoi specificare questo proxy solo su UIImageView di Apple che non si applica alla sottoclasse. – Gaston

    +1

    È stato approvato? – bangerang