2017-04-30 3 views
0

私はUIプログラミングに慣れていません。今では、画面がタップされた回数に基づいて速度で画面パルスを作成しようとしています。私の問題は、タップが検出され、アニメーションの時間が短くなると、最初からアニメーションを開始して、再起動時に白いフラッシュを作成することです。タップが検出された時点でどのような時点からでもアニメーションを高速化するにはどうすればよいでしょうか。既にアニメーションがスピードを使用している間にアニメーションをスピードアップするにはどうすればよいですか?

マイコード:

class ViewController: UIViewController { 

    var tapCount: Int = 0 
    var pulseSpeed: Double = 3 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     counter.center = CGPoint(x: 185, y: 118) 

     pulseAnimation(pulseSpeed: pulseSpeed) 
    } 

    func pulseAnimation(pulseSpeed: Double) { 
     UIView.animate(withDuration: pulseSpeed, delay: 0, options: [UIViewAnimationOptions.repeat, UIViewAnimationOptions.autoreverse], 
     animations: { 
      self.red.alpha = 0.5 
      self.red.alpha = 1.0 
     }) 
    } 

    @IBOutlet weak var red: UIImageView! 
    @IBOutlet weak var counter: UILabel! 

    @IBAction func screenTapButton(_ sender: UIButton) { 
     tapCount += 1 
     counter.text = "\(tapCount)" 
     pulseSpeed = Double(3)/Double(tapCount) 
     pulseAnimation(pulseSpeed: pulseSpeed) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

    } 

} 

答えて

0

あなたがあなたの代わりにトップに内蔵されてUIViewアニメーションに頼るの後にしているものを達成するために直接Core Animationのを使用する必要があります。

// create animation in viewDidLoad 
let pulseAnimation = CABasicAnimation(keyPath: "opacity") 
pulseAnimation.fromValue = 0.5 
pulseAnimation.toValue = 1.0 
pulseAnimation.autoreverses = true 
pulseAnimation.duration = 3.0 
pulseAnimation.repeatCount = .greatestFiniteMagnitude 

// save animation to property on ViewController 
self.pulseAnimation = pulseAnimation 

// update animation speed in screenTapButton 
pulseAnimation.speed += 0.5 

スピード番号を少し使ってみてください。デフォルトの速度は1.0で、アニメーションの長さは3秒であるため、0.5から1.0に戻って0.5に戻るには6秒かかるはずです。 2.0の速度では、同じアニメーションが2倍の速さで、3秒間のフルアニメーションが発生します。

私はそれが助けてくれることを願っています!

関連する問題