2017-04-30 1 views
0

Ich bin neu in der UI-Programmierung und im Moment versuche ich, den Bildschirm mit einer Geschwindigkeit zu pulsen, die auf der Anzahl von Malen basiert, die der Bildschirm angetippt wurde. Mein Problem ist, dass wenn eine Berührung erkannt wird und die Dauer der Animation verkürzt wird, beginnt die Animation von Anfang an und erzeugt beim Neustart einen weißen Blitz. Wie würde ich die Animation beschleunigen, egal von welchem ​​Punkt, wenn ein Antippen erkannt wird?Wie beschleunige ich eine Animation, während sie bereits mit swift erfolgt?

Mein Code:

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() 

    } 

} 

Antwort

0

Sie müssen direkt Core Animation verwenden, um zu erreichen, was du bist, nachdem sich stattdessen auf die UIView Animation zu verlassen, die in oben aufgebaut ist.

// 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 

Vielleicht möchten Sie mit den Geschwindigkeitszahlen ein wenig spielen. Die Standardgeschwindigkeit beträgt 1,0 und die Animation gibt eine Dauer von 3 Sekunden an. Es sollte also 6 Sekunden dauern, um von 0,5 auf 1,0 zurück zu 0,5 zu wechseln. Bei einer Geschwindigkeit von 2.0 wird die gleiche Animation doppelt so schnell ausgeführt, oder 3 Sekunden für den gesamten Zyklus.

Ich hoffe, dass hilft!

Verwandte Themen