2016-04-16 11 views
-1

Ich versuche, eine animierte UILabel mit CATransition zu machen, die den ursprünglichen Text ausblenden und den neuen Text einblenden kann, wenn ich den Bildschirm berühre. Hier ist mein Code und ich kann nicht herausfinden, warum es keine Animation gibt. Bitte hilf mir. Ich benutze Xcode 7.3.Animierte UILabel mit CATransition funktioniert nicht

var subtitle:UILabel! 
var winsize:CGSize! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let animation = CATransition() 
    animation.type = kCATransitionFade 
    animation.duration = 0.75 
    animation.fillMode = kCAFillModeBoth 
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
    animation.delegate = self 

    self.subtitle = UILabel() 
    self.subtitle.text = "f" 
    self.subtitle.frame = CGRectMake(45, 30, 200, 50) 
    self.subtitle.font = UIFont.systemFontOfSize(25) 
    self.subtitle.textColor = UIColor.grayColor() 
    self.view.addSubview(self.subtitle) 
    self.subtitle.layer.addAnimation(animation, forKey: "animation") 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    self.subtitle.text="HighSchool" 
} 

Mit Hilfe von @ Matt, der folgende Code funktioniert.

var subtitle:UILabel! 
var winsize:CGSize! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    winsize = self.view.frame.size 

    self.subtitle = UILabel() 
    self.subtitle.text = "f" 
    self.subtitle.frame = CGRectMake(45, 30, 200, 50) 
    self.subtitle.font = UIFont.systemFontOfSize(25) 
    self.subtitle.textColor = UIColor.grayColor() 
    self.view.addSubview(self.subtitle) 

    UIView.transitionWithView(self.subtitle, duration: 0.5, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: nil, completion: nil) 
} 


override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    self.subtitle.text="HighSchool" 
} 
+0

Erste danken für Ihre Hilfe. Was ich tun möchte, ist ein UILabel, dass, wenn ich seinen Text ändere, der ursprüngliche Text ausgeblendet und neuer Text eingeblendet wird, wie der in http://stackoverflow.com/questions/3073520/animate-text-change gezeigte -in-uilabel – user2232335

+0

Nun, dein Code tut nichts dergleichen. Du sagst nur 'selftitle.text = "HighSchool" '. Dort gibt es keine Fade-Animation. Es wird nicht vom Himmel fallen; Sie müssen explizit in die Animation schreiben. Rufen Sie 'transitionWithView: duration: options: animations: completion:' auf und ändern Sie den Text. Es sind drei Codezeilen, super einfach. – matt

+0

Es funktioniert !!! Ich danke dir sehr! – user2232335

Antwort

0

So:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let opts : UIViewAnimationOptions = .TransitionCrossDissolve 
    UIView.transitionWithView(self.subtitle, duration: 0.75, options: opts, animations: { 
     self.subtitle.text="HighSchool" 
    }, completion: nil) 
}