2017-05-23 4 views
0

Ich bin eine rotierende Ziffer Ansicht wie diese Umsetzung: https://github.com/jonathantribouharet/JTNumberScrollAnimatedViewWie kann die Geschwindigkeit der UIView-Animation gesteuert werden?

Aber statt Scrollen von etwa 1 bis 9, möchte ich die Animation (1 bis 9 und dann wieder auf 1 bis 9), um fortzufahren Scrollen, bis ich Stoppen Sie es manuell.

Ich implementiere dies, indem ich UILabel Subviews 1-9, vertikal gestapelt, und ein zusätzliches Label für Nummer 1 an der Unterseite hinzufügen. Beim Drehen nach unten (zeigt die untere Beschriftung 1 an), setze ich die Transformation bei der Beendigung der Animation auf den Ursprung zurück, zeige Top Label 1 und starte die rotierende Animation neu.

Dies funktioniert gut, aber da jede Drehung (1-9-1) getrennt ist, beschleunigt die Animation von 1-9 und stoppt dann bei 1 und nimmt die Geschwindigkeit bei der nächsten Iteration auf. Das möchte ich nicht, ich möchte, dass die Rotation zwischen den Iterationen konstant bleibt.

Wie kann ich dies mit UIView-Animation tun? Hier

ist der Code:

public func startAnimation(){ 
    UIView.setAnimationCurve(UIViewAnimationCurve.easeIn) 
    UIView.animate(withDuration: TimeInterval(self.loopDuration), animations: { [unowned self] in 
     self.container!.transform = CGAffineTransform(translationX: 0, y: CGFloat(-(self.endNumber-self.startNumber+1)*(self.size))) 
    }) { [unowned self] (completed) in 
     if self.isAnimationStopped { 
      self.container!.transform = CGAffineTransform(translationX: 0, y: 0) 
      UIView.setAnimationCurve(UIViewAnimationCurve.easeOut) 
      UIView.animate(withDuration: TimeInterval(self.loopDuration), animations: { 
       self.container!.transform = CGAffineTransform(translationX: 0, y: CGFloat(-self.targetY)) 
      }) 
     } else { 
      self.container!.transform = CGAffineTransform(translationX: 0, y: 0) 
      self.startAnimation() 
     } 
    } 

} 

Antwort

1

standardmäßig UIView Animation verwendet ease-in, ease-out Animation Timing, wo die Animation reibungslos beschleunigt, läuft, bremst dann zum Stillstand.

Sie müssen ein längeres Formular von UIView.animate, animate(withDuration:delay:options:animations:completion:) verwenden, das einen Optionsparameter verwendet und eine Zeitkurve von .curveLinear angibt.

Geben Sie einfach 0.0 für die Verzögerung und options: .curveLinear

+0

wie ein Zauber. Vielen Dank! – NeoWang

Verwandte Themen