Even if you say that the accepted answer works, (1) you need to use TransitionCrossDissolve instead of CurveEaseInOut ; (2) during testing, I noticed that in Swift it seems that you cannot add a subview just before the animation. (I think this is a mistake.)
Seeing that myLabel turns out to be local in your example (since global variables should be written as self.myLabel within the closure of the block), there is a good chance that you added subview myLabel to the same method as the animation and without delay.
So, if you are still having problems, I recommend (1) making myLabel global and (2) adding a delay between adding a subview and performing the animation in this view, for example:
self.view.addSubview(myLabel) var timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "animate", userInfo: nil, repeats: false) } func animate() { UIView.transitionWithView(myLabel, duration: 5.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: { self.myLabel.textColor = UIColor.redColor() }, completion:nil) }
source share