5

Attualmente sto dando gli ultimi ritocchi a un progetto.Animating setHidden: su NSView tramite Cocoa binding

Un sacco (se non tutti) della logica dell'interfaccia utente si basa attualmente su Cocoa Bindings. Alcuni degli elementi dell'interfaccia utente (etichette, pulsanti, ecc.) Hanno i loro binding "nascosti" definiti. Quando determinati eventi vengono attivati, la visibilità di questi elementi viene attivata.

Sto provando ad animare il cambio di visibilità (animando l'opacità e forse anche la scala). Questo potrebbe facilmente essere realizzato in diversi modi, sia impostando le proprietà del layer rilevanti, aggiungendo le animazioni al layer, ecc. Tuttavia, dal momento che sto cercando di fare totalmente affidamento sul comportamento dei binding, "non posso" fare realmente questo direttamente.

ho provato un'implementazione con le azioni di livello, definendo le azioni per le chiavi kCAOnOrderIn e kCAOnOrderOut sugli elementi rilevanti, ma in realtà non ha funzionato, come il setHidden: è più probabile essere attivato sul NSView posto del CALayer - - che ha un senso.

Quindi, la mia domanda è: come animereste setHidden: su un NSView, quando setHidden: viene invocato da Cocoa Bindings.

Grazie.

risposta

0

L'animazione di setHidden non ha effetto visivo poiché è attivata o disattivata. Se vuoi animare la visibilità, usa setAlpha (o setOpacity sul layer). Questi prendono un valore compreso tra 0.0 e 1.0. Se è necessario impostare la bandiera nascosta per ottenere informazioni sullo stato, chiamare il numero -performSelector:withObject:afterDelay passandogli un selettore che imposta il valore nascosto in base a ciò che è necessario che sia dopo l' l'animazione sia stata completata. In alternativa è possibile impostare un delegato per l'animazione esplicita da richiamare al termine dell'animazione e chiamare quindi setHidden.

+0

'setHidden:' su un CALayer * è * animatable. L'azione predefinita per le chiavi order in/out usa effettivamente una CATransition che causa l'opacità dei livelli di animare. – phluid

+0

Sì. Nascosto è animabile nel senso che è possibile modificare i valori, tuttavia esistono solo due valori possibili. Core Animation interpola valori intermedi. Con nascosto, è SÌ o NO. Ma quello che sembra che tu voglia fare è attivare automaticamente un'animazione dissolvenza quando viene chiamato setHidden. È corretto? Se è così, non penso che tu possa farlo solo con una rilegatura. Probabilmente dovrai scrivere codice. Puoi provare a associare la proprietà alpha e impostarla su 0 o su 1. Sembra che possa dare il tuo desiderio, ma non sono sicuro di come hai collegato le cose. –

0

Suggerirei di dare un'occhiata a NSViewAnimation. Prende qualsiasi NSView e può animare la cornice, le dimensioni o la visibilità.

2

Questo svanirà un NSView ...

[[someView animator] setAlphaValue:0.0f]; 
Problemi correlati