Fügen Sie CAEmitterCell zu einer anderen CAEmitterCell hinzu
-
20-12-2019 - |
Frage
Ich versuche, einen Partikeleffekt zu erzielen, bei dem eine Zelle in einer anderen Zelle verschachtelt ist.Denken Sie an das einfache Beispiel eines Feuerwerks, das es hier gibt Apple-Dokumente.Sie haben Zellen in andere Zellen verschachtelt und sie mithilfe des BeginTime-Parameters zeitlich festgelegt.Ich habe jedoch nicht wie sie einen „beginTime“-Parameter für meine CAEmittorCell, ich habe stattdessen einen im CAEmittorLayer ...Wie soll ich Zellen verschachteln und zu unterschiedlichen Zeiten ausführen lassen, wenn die Zelle keinen beginTime-Parameter hat?
Beachten Sie, dass es im Apple-Beispielcode einen „beginTime“-Parameter für CAEmitterCell gibt
**CAEmitterCell *firework = [CAEmitterCell emitterCell];**
firework.contents = img;
firework.birthRate = 9999;
firework.scale = 0.6;
firework.velocity = 130;
firework.lifetime = 2;
firework.alphaSpeed = -0.2;
firework.yAcceleration = -80;
**firework.beginTime = 1.5;**
firework.duration = 0.1;
firework.emissionRange = 2 * M_PI;
firework.scaleSpeed = -0.1;
firework.spin = 2;
---- Gelöst, siehe Antworten unten ----
Ich habe den Selektor einfach manuell wie folgt aufgerufen, um das gewünschte Ergebnis zu erhalten:
CAEmitterCell cell = new CAEmitterCell();
cell.SetValueForKeyPath (NSNumber.FromFloat(1), (NSString)"beginTime");
Lösung
Der CAMediaTiming
Bindungen fehlen nicht wirklich.Sie wurden zusammengefaltet CAAnimation
(Hier) Und CALayer
(Hier).Das liegt daran, dass es vor 7.0 war [Protocol]
Unterstützung, war die Art und Weise, Protokolle zu implementieren.
Das Problem ist das CAMediaTiming
Ist dokumentiert nur von diesen beiden Typen übernommen werden - aber CAEmitterCell
(und vielleicht auch andere, ich muss das überprüfen) auch entspricht dazu und im Augenblick Legen Sie die Protokollmethoden nicht offen.
Die schnelle/sofortige Problemumgehung besteht darin, den fehlenden Selektor auf der Instanz aufzurufen.Zukünftige Versionen von Xamarin.iOS werden sie bereitstellen.