2016-04-11 16 views
3

Ich möchte UILabel.text Wert von 0 bis 100 mit CoreAnimation mit Beschleunigungsfunktionen (z. B. easeInOutQuad) erhöhen. Aber es scheint, als wäre die Texteigenschaft nicht animierbar. Wie erreiche ich das mit Hilfe von CA? Oder müsste ich die Beschleunigungsfunktion selbst implementieren und mit GCD aufrufen? DankeWie würde man UILabel-Texteigenschaften mit CoreAnimation in Swift animieren?

P.S. Ich möchte so viel wie möglich bei CA bleiben.

+0

Ist es fair zu sagen, dass Sie eine numerische Eigenschaft, die Sie animieren möchten, und dass sein Wert wird in einem Etikett dargestellt ist, und dass für jedes Bild der Animation wollen Sie das Etikett der (formatiert) angezeigt werden interpolierter numerischer Wert? –

+0

Ja. Genau das möchte ich erreichen. – mra214

+0

@David Rönnqvist Ich habe versucht, benutzerdefinierte Eigenschaft mit didset Beobachter zu animieren, wo ich UILabel Wert aktualisieren, aber es hat auch nicht funktioniert. – mra214

Antwort

3
class ViewController: UIViewController { 

    @IBOutlet weak var label: UILabel! 

    var counter = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("animate"), userInfo: nil, repeats: true) 
     timer.fire() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func animate() { 
     UIView.transitionWithView(label, 
           duration: 1.0, 
           options: [.CurveEaseInOut], 
           animations: {() -> Void in 
           self.counter += 1 
           self.label.text = "\(self.counter)" 
     }, completion: nil) 

    } 
} 
+0

Wahrscheinlich habe ich mich nicht klar gemacht. Ich möchte, dass der Wert inkrementell während der Animationszeit animiert wird: 1..2..3..4 ... 100 – mra214

+0

Versuchen Sie, eine Ländereigenschaft festzulegen, und richten Sie einen NSTimer (planedTimerWithTimeInterval :) ein, der eine Methode mit dem obigen Code aufruft, aber stattdessen von Hello World setzen Sie es auf den Wert der Eigenschaft. –

+0

Danke Jasper, aber auf diese Weise sehe ich keine Zwischenwerte (steigende Zahlen). – mra214

3

Sie können das mit Core-Animation erreichen. Sie können Ihrem Label Animationen hinzufügen. Probieren Sie folgende

CATransition *textAnimation = [CATransition animation]; 
textAnimation.type = kCATransitionMoveIn; 
textAnimation.duration = 0.5; 
textAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
[numLabel.layer addAnimation:textAnimation forKey:@"changeTextTransition"]; 

Sie können Ihren Etikettentext jederzeit später ändern Animation auf Hinzufügen, und es wird animieren.

numLabel.text = "1"; 
Verwandte Themen