CoreAnimation - Opazität ein- und ausblenden Animation funktioniert nicht
Versuche ich zu schaffen, eine ziemlich einfache CoreAnimation für die Verwendung in einer AVComposition
. Mein Ziel ist die Erstellung eines CALayer
welche, durch verschiedene Unterebenen, blendet einen Titel in-und out -, dann schwindet in einem der Bilder. Eine Diashow, im Grunde. Diese wird exportiert .mov mit AVAssetWriter
.
Mit Hilfe von der WWDC 2011 AVEditDemo, ich habe in der Lage zu Holen einen Titel und Bilder erscheinen. Das problem ist, dass Sie alle auf dem Bildschirm zur gleichen Zeit!
Ich erstellt habe, wird jede Ebene mit einer Deckkraft von 0,0. Ich habe dann Hinzugefügt, dass ein CABasicAnimation
zu verblassen Sie von 0,0 bis 1,0, mit dem folgenden code:
CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
fadeInAnimation.additive = NO;
fadeInAnimation.removedOnCompletion = YES;
fadeInAnimation.beginTime = 1.0;
fadeInAnimation.duration = 1.0;
fadeInAnimation.fillMode = kCAFillModeForwards;
[titleLayer addAnimation:fadeInAnimation forKey:nil];
Das problem scheint zu sein das 'beginTime' - Eigenschaft. Das "1.0" ist dazu gedacht, eine Verzögerung, so dass es beginnt 1 Sekunde nach dem start der animation. Jedoch, es erscheint sofort auf dem Bildschirm. Ein fade-out-animation
Der Rückseite dieser code, für die fade-out, ändert einfach die fromValue auf 1,0 und die toValue auf 0.0. Es verfügt über eine Start-Zeit von 4,0 und funktioniert perfekt.
Ich bin mit dem folgenden zu erstellen, die animatedTitleLayer
:
CATextLayer *titleLayer = [CATextLayer layer];
titleLayer.string =self.album.title;
titleLayer.font = @"Helvetica";
titleLayer.fontSize = videoSize.height / 6;
titleLayer.alignmentMode = kCAAlignmentCenter;
titleLayer.bounds = CGRectMake(0, 0, videoSize.width, videoSize.height / 6);
titleLayer.foregroundColor = [[UIColor redColor]CGColor];
titleLayer.opacity = 0.0;
Das Bild fade-in-Animationen haben eine beginTime 5 Sekunden auseinander. Wie der Titel, deren fade-out-Animationen funktionieren.
Jede Hilfe wäre sehr geschätzt werden!
Prost!
BEARBEITEN
Die Antworten waren alle hilfreich, aber schließlich entdeckte ich, dass nur eine animation Hinzugefügt werden könnten, um eine CALayer
. Die fade-out-animation arbeitete als war es die Letzte Hinzugefügt.
Dann habe ich versucht, eine CAAnimationGroup, aber das hat nicht funktioniert wie ich das ändern das gleiche key-value-path.
Also ich realisiert habe, dass ein CAKeyframeAnimation
ist das beste für diese. Nur ich habe einige Schwierigkeiten mit, die auch! Der code ist jetzt verblassen in Ordnung, aber es ist nicht ausklingt. Ich habe versucht verschiedene fillMode ist, verändert sich die Dauer, usw. Nicht, damit es funktioniert!!
Hier ist mein code:
CAKeyframeAnimation *fadeInAndOut = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
fadeInAndOut.duration = 5.0;
fadeInAndOut.autoreverses = NO;
fadeInAndOut.keyTimes = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:4.0],
[NSNumber numberWithFloat:5.0], nil];
fadeInAndOut.values = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:0.0], nil];
fadeInAndOut.beginTime = 1.0;
fadeInAndOut.removedOnCompletion = NO;
fadeInAndOut.fillMode = kCAFillModeBoth;
[titleLayer addAnimation:fadeInAndOut forKey:nil];
InformationsquelleAutor der Frage gamblor87 | 2012-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin vor dem gleichen Problem und das problem ist - man kann die Schicht nicht enthalten, fade in und out.
So können Sie auch die anderen animation zu der übergeordneten Ebene, wie ich es Tat
InformationsquelleAutor der Antwort comonitos
Mann, so viele komplizierte Antworten. Ist der einfachste Weg zum hinzufügen von autoreverse. Voila.
InformationsquelleAutor der Antwort Mikhail Larionov
Diese funktioniert bei mir:
InformationsquelleAutor der Antwort LenK
Versuchen:
InformationsquelleAutor der Antwort Peter DeWeese
Ich glaube, Sie suchen nach
timeOffset
nichtbeginTime
...InformationsquelleAutor der Antwort nielsbot
Den Kern des problem war nicht das Verständnis der keyTimes-Eigenschaft eines CAKeyframeAnimation. Diese Frage klären Sie alle und setzen Sie mich auf dem richtigen Weg:
Welche Art von Wert ist keyTime in einem CAKeyFrameAnimation?
InformationsquelleAutor der Antwort gamblor87
Kreditaufnahme aus dem link erwähnt gamblor87 und hinzufügen meine Kommentare als Erklärung.
InformationsquelleAutor der Antwort SayeedHussain
LenK's Antwort funktionierte perfekt für mich. Wenn jemand interessiert ist, ich neu geschrieben für Obj-C (Hinweis: ich habe auch leicht verändert, der key-frames auf fade-in):
InformationsquelleAutor der Antwort Ryan
Ist der Punkt-Taste name. Setzen Sie die "Deckkraft" - Taste.
Überprüfen Sie die Beispiel-code. Getestet habe ich in Swift 4
InformationsquelleAutor der Antwort Den
Die alternative Möglichkeit ist die Verwendung CAAnimationGroup. CAKeyframeAnimation funktioniert auch für das UI. Dieser code funktioniert in der Benutzeroberfläche für die show-animation in Echtzeit. Aber nicht funktionieren in
AVVideoCompositionCoreAnimationTool
- bitte scrollen Sie nach unten, wenn Sie es brauchen. Es ist nicht code-bereit für copy-paste, aber Sie bekommen die Idee. Auch, Sie hinzufügen können zudem Animationen zu der Gruppe:Hier kleine Notiz über animation auf Ebenen, die für
AVVideoCompositionCoreAnimationTool
. Sie können siehe entsprechende gif-Bild (Titel sollte angezeigt werden und verschwinden, eins nach dem anderen). Um dieses Problem zu lösen verwende ich 2 separateCALayer
's da aus irgendeinem Grund auf einer Ebene 2opaque
Animationen auf mehreren Ebenen glitched.Und am Ende, wir können die richtige Reihenfolge
InformationsquelleAutor der Antwort WINSergey
Blick auf meine Antwort https://stackoverflow.com/a/44204846/667483
In der Zusammenfassung: verwenden
beginTime
setzen Sie fillMode aufkCAFillModeBackwards
auf Sie animation-Objekt.InformationsquelleAutor der Antwort surfrider