2016-12-26 1 views
0

Hier habe ich einen Code, um eine UIView mit einem Label als Benachrichtigung anzuzeigen.Kann ich ein Element zwingen, seine Animation sofort zu beenden?

self.not1cons.constant = 0 
self.notificationLbl1.text = self.notification1 

UIView.animate(withDuration: 2.5, delay: 0.3, options: .allowAnimatedContent, animations: { 

self.view.layoutIfNeeded() 

     }, completion: { finsihed in 

      self.not1cons.constant = -100 

      UIView.animate(withDuration: 2.5, delay: 2.0, options: .allowAnimatedContent, animations: { 

       self.view.layoutIfNeeded() 

     }, completion: { finshed in 

      }) 
     }) 

Es beginnt Off-Screen und steigt in Sicht. Es bleibt für einige Sekunden an Ort und Stelle und kehrt zu seiner ursprünglichen Position außerhalb des Bildschirms zurück. Ich benötige Code, damit diese verketteten Animationen sofort ausgeführt werden können. Ist das möglich?

+0

Sie fügen eine 'Verzögerung' von' 2.0' hinzu und beschweren sich dann, dass es eine Verzögerung gibt? – matt

+0

Was genau meinen Sie mit "sofort passieren"? Wissen Sie im Voraus, dass Sie die Animationen sofort beenden möchten oder möchten Sie die Animationen mitten in der Animation abbrechen? – nathan

+0

Es ist irgendwie unklar, wenn ich es richtig verstanden habe, stimme ich @matt Note, warum Sie Verzögerung für die zweite Animation hinzufügen? –

Antwort

0

Sie könnten dies wahrscheinlich erreichen, indem Sie die CAAnimationen manipulieren, die das System hinter den Kulissen generiert, aber das ist ziemlich knifflige Angelegenheit und keine gute Idee, da es auf undokumentierten Details der aktuellen Implementierung beruht, was riskant ist.

Stattdessen würde ich vorschlagen, Ihre Animationen zu überarbeiten, um den UIViewPropertyAnimator 1 new-to-iOS zu verwenden, der das Anhalten und Fortsetzen von Animationen sowie das Scrubbing an beliebigen Stellen unterstützt.

Ich habe ein Demo-Projekt auf Gitub namens UIViewPropertyAnimator-test, mit dem Sie eine Animation mit einem Schieberegler vor und zurück schrubben können. Es ist komplexer als Ihr Bedürfnis, aber es sollte Ihnen die Idee geben.

+0

Danke für die coole Bibliothek, aber ich habe nur eine Funktion verwendet, um ihre Deckkraft auf 0 zu setzen. –

Verwandte Themen