2017-05-10 1 views
2

So habe ich eine UIButton, dass ich den Text für mit Animationen ändern möchte. Die Art und Weise, wie die Animation angenommen wird, ist zu arbeiten ist der Text der Schaltfläche schrumpft den ganzen Weg hinunter bis zum Nichts, dann ändert sich der Text, und dann skaliert es wieder auf die ursprüngliche Größe. Ich versuche immer noch, den Text korrekt in das Nichts zu verkleinern.Animieren eines UIButton Text zu pinch In und Pinch Out funktioniert nicht

Wenn ich diesen Code verwenden:

UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: { 
     //Zzzeeeewwwwwwwwww 
     UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.3, animations: { 
      self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.001, y: 0.001); 
     }) 


     //Wwwwwweeeeeeyyyyyppp 
     UIView.addKeyframe(withRelativeStartTime: 0.3, relativeDuration: 0.3, animations: { 
       self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100); 
     }) 
    }, completion: nil) 

ich nur Animationen für den ersten Teil bekommen, wo es richtig skaliert nach unten, aber dann nicht zurück vergrößern. Es springt einfach an seinen Platz zurück, ohne den ganzen Weg zu animieren, wenn es zurück wächst.

Ich versuchte durch Verkettung UIView Animationen mit Dauern ("die altmodische Art"), und das Gegenteil passiert. Der erste Teil passiert sofort, dann wächst er richtig zurück. Hier ist der Code dafür:

UIView.animate(withDuration: 0.3, animations: { 
     self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.01, y: 0.01); 
    }) { _ in 
     UIView.animate(withDuration: 0.3, animations: { 
      self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100); 
     }, completion: nil) 
    } 

Ich habe keine Ahnung, was dieses Problem verursachen könnte. Ich bin seit Stunden hier festgefahren. Ich habe mich noch nicht einmal an den Text gewandt. Das verursacht eine ganze Reihe anderer Probleme.

Antwort

1

gibt es einige Dinge zu beachten:

1. Skalierungsfaktoren

In ersten Skalierungs Animation Sie label.transform.scaledBy(x: 0.001, y: 0.001)
angeben Aber in der zweiten: label.transform.scaledBy(x: 100, y: 100)

Beachten Sie, dass durch 1000 multiplizieren müssen am Ende 1.0 zu bekommen.

2. Relative Keyframe Zeit

Die Art und Weise das Hinzufügen von Keyframes funktioniert, ist durch eine relative Zeitangabe, die in Reichweite ist [0.0 - 1.0], so dass anstelle von 0.3 müssen Sie 0.5 zu bekommen genau die Hälfte der Animation spezifizieren. Betrachten Sie das folgende Stück:

UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: { 
    UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: { 
     view.transform = view.transform.scaledBy(x: 0.001, y: 0.001) 
    }) 

    UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: { 
     view.transform = view.transform.scaledBy(x: 1000, y: 1000) 
    }) 
}, completion: nil) 

Wenn Sie von Etiketten abstrakt, hier ist die Animation, die Sie
animation

+0

Ja, das war ein Tippfehler bekommen. Aber es hat funktioniert !! Es ist so schön !! (: Vielen Dank – QuantumHoneybees