2017-02-26 5 views
0

Swift 3を使用して、いくつかのUILabelsを右から左に「滑らせる」アニメーションを作成しています。 ラベルの長さはさまざまです。curveEaseInOutまたはKeyframesを使用してSwiftでアニメーションの速度を制御するにはどうすればよいですか?

私は、スピードを長さに関係なく同じになるようにしようとしています。

私はこのコードを使用していますが、カーブの長さと性質に基づいて各ラベルの長さを変更することができるため、視覚効果が実際には得られません。

 UIView.animate(withDuration: 5.0, delay: 5.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.0, options: [.curveEaseInOut,.repeat], animations: { 
      self.Label_1.frame.origin.x = -self.Label_1.frame.width 
     }, completion: nil) 

     UIView.animate(withDuration: 10.0, delay: 5.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.0, options: [.curveEaseInOut,.repeat], animations: { 
      self.Label_2.frame.origin.x = -self.Label_2.frame.width 
     }, completion: nil) 

アニメーションは、中点が遅くなるまでスピードアップします。 curveEaseInOutモーションカーブは「緩和」の間に一定の速度の期間を占めていないように見えます。私が描いたこのひどいグラフィックは役立つはず:

enter image description here

1)曲線の見かけの視覚的な性質を示す - )やすインと 2に対し、その間の任意の一定速度のない緩和アウトの移行を私が達成しようとしていることを示しています。

2)との間で、イージーイン、イージーアウト、および一定速度の間の時間の長さを指定することができました。

私は後にどのような効果を得ることができますか?

+0

これを行うには、KeyFramedアニメーションを使用する必要があると思います。 –

+0

@ReinierMelian - おかげさまでキーフレームを試してみます – wayneh

答えて

0

これはシンプルで簡単なアニメーションです。あなたが本当にやりたいことは、このアニメーションのレイヤーを作成することです。このような何か、それは異なる変数を持っているので、あなたがやっていることに対してはうまくいかないでしょうが、それは私のために働いていました。

let labelSpringAnimationIn = CASpringAnimation(keyPath: "position.x") 
    labelSpringAnimationIn.fromValue = -100.0 
    labelSpringAnimationIn.toValue = 200.0 
    labelSpringAnimationIn.duration = 2.0 

    //this duration can be whatever you want, if you want the cons 
    //you can find what these mean by searching in the documentation 
    labelSpringAnimationIn.initialVelocity = 3.0 
    labelSpringAnimationIn.damping = 9.8 

    let labelSpringAnimationOut = CASpringAnimation(keyPath: "position.x") 
    labelSpringAnimationOut.fromValue = 200.0 
    labelSpringAnimationOut.toValue = -100.0 
    labelSpringAnimationOut.duration = 2.0 

    //this duration can be whatever you want, if you want the cons 
    //you can find what these mean by searching in the documentation 
    labelSpringAnimationOut.initialVelocity = 3.0 
    labelSpringAnimationOut.damping = 9.8 


    UIView.animate(withDuration: 2.0, delay: 0.0, options: [], animations: { 
     self.label.layer.add(labelSpringAnimationIn, forKey: nil) 
    }, completion: { 
     _ in UIView.animate(withDuration: 2.0, delay: 0.0, options: [], animations: { 
      self.label.layer.add(labelSpringAnimationOut, forKey: nil) 

     }, completion: { 
      _ in 
      self.label.layer.removeAllAnimations() 
      sleep(UInt32(3.0)) 
      self.labelAnimation() 


     }) 
    }) 
関連する問題