2012-07-31 12 views
10

So che è possibile creare custom animatable properties in Core Animation, ma nel framework SceneKit di OS X 10.8? SCNAnimatable non sembra esporre le stesse API di CALayer per rendere animabili le proprietà.Proprietà animabili personalizzate in SceneKit

Nella mia applicazione, ho una sottoclasse SCNNode chiamata Starfield, che ho trasferito da una vecchia applicazione OpenGL utilizzando un SCNNodeRendererDelegate. Starfields espone una proprietà GLfloat chiamato warpFactor:

@interface Starfield : SCNNode<SCNNodeRendererDelegate> { 
    // other stuff that's not really important for this question 
    GLfloat warpFactor; 
} 

@property(nonatomic) GLfloat warpFactor; 
@end 

Ma quando provo ad aggiungere un'animazione ad esso, in questo modo:

CABasicAnimation *warp = [CABasicAnimation animationWithKeyPath:@"warpFactor"]; 
warp.toValue = @1.0; 
warp.duration = 5.0; 
[starfield addAnimation:warp forKey:@"warp"]; 

ottengo il seguente nella console:

[SCNKit ERROR] warpFactor is not an animatable path (from <unnamed SCNNode 0x1016473c0, no children>) 

So che SceneKit è nuovo di zecca, ma qualcuno capisce come farlo funzionare?

+1

Sono sinceramente sorpreso che questo è ha chiesto qui circa SceneKit la prima domanda qualcuno. –

risposta

0

SceneKit non supporta percorso chiave animatable personalizzato

+0

Questo sembra certamente plausibile, ma prima di arrendermi, vorrei confermare che in realtà quello che voglio fare è impossibile. Puoi indicarmi i documenti, o qualsiasi altra cosa, che lo confermi? –

+0

I documenti per SceneKit sono piuttosto sparsi. Ho guardato e non ho trovato nulla. Il messaggio di errore potrebbe essere il migliore che otterrai. – jblocksom

+0

Sì, speravo che qualcun altro fosse in grado di entrare con una risposta diversa, ma sembra che questo sia probabilmente il meglio che possiamo immaginare almeno fino a quando Apple non rilascerà una documentazione migliore. Accettare. –

3

Una soluzione/mod:

  • creare un nodo geometria meno e animare alcune proprietà animatable su quel nodo, per esempio l'opacità
  • uso a SCNSceneRendererDelegate per collegarsi alla fase appropriata del processo di rendering e aggiornare manualmente la proprietà personalizzata con il valore della proprietà animata del nodo senza geometria (assicurarsi di leggere la proprietà animata dal nodo presentationNode)

Questa soluzione è brutto, ma consente di sincronizzare l'animazione della proprietà personalizzata con altre animazioni tramite SCNTransaction o CAAnimationGroup

+0

Idea interessante, grazie! –

+0

Ho creato un "nodo di interpolazione" che ha fatto proprio questo: ho animato cose come le proprietà CIFilter e ho valutato i valori di presentazione ogni fotogramma per fare ciò di cui avevo bisogno. Ha funzionato abbastanza bene. – LucasTizma