3

CoreAnimationをeasing関数(easeInOutQuadなど)で使用して、UILabel.textの値を0から100に増やしたいとします。しかし、テキストプロパティはアニメーション化できないようです。だからCAの助けを借りてこれを達成するには?または、イージング関数を自分で実装してGCDを使用して呼び出す必要がありますか? ありがとうSwiftのCoreAnimationでUILabelテキストプロパティをどのようにアニメートするのですか?

P.S.私は可能な限りCAに固執したいと思います。

+0

アニメーション化する数値プロパティがあり、その値がラベルに表示され、アニメーションの各フレームで、(フォーマットされた)補間された数値? –

+0

はい。それはまさに私が達成したいものです。 – mra214

+0

@DavidRönnqvist私はUILabel値を更新するdidSetオブザーバでカスタムプロパティをアニメーション化しようとしましたが、どちらも機能しませんでした。 – mra214

答えて

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

おそらく私は明らかにしなかった。アニメーション時に値を段階的にアニメートする必要があります:1..2..3..4 ... 100 – mra214

+0

国のプロパティを設定し、上記のコードでメソッドを呼び出すNSTimer(scheduledTimerWithTimeInterval :)を設定してみてくださいこんにちは世界のプロパティの値に設定します。 –

+0

ジャスパーさんありがとうございます。しかし、この方法では中間値(数字を増やす)は表示されません。 – mra214

3

これはコアアニメーションを使用して達成できます。ラベルにアニメーションを追加できます。以下を試してください

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

アニメーションの追加時にいつでもラベルテキストを変更してアニメーション化することができます。

関連する問題