2017-07-14 37 views
0

当我按下主页按钮然后重新启动应用程序时,我的动画停止运行。设置按钮停止旋转并且闪烁标签刚刚消失。这里是我的两个动画代码:当主页按钮被按下并且应用程序再次重新启动时,动画无法工作

闪烁动画:

extension UILabel { 

    func startBlink() { 
     UIView.animate(withDuration: 0.8, 
         delay:0.0, 
         options:[.autoreverse, .repeat], 
         animations: { 
         self.alpha = 0 

     }, completion: nil) 
    } 
} 

旋转动画:

extension UIButton { 

    func startRotating() { 

     UIView.animate(withDuration: 4.0, delay: 0.0, options:[.autoreverse, .repeat,UIViewAnimationOptions.allowUserInteraction], animations: { 

      self.transform = CGAffineTransform(rotationAngle: CGFloat.pi) 


     }, completion: nil)          
    }  
} 

当我运行它:

override func viewDidLoad() { 
    super.viewDidLoad() 

    settingsButton.layer.cornerRadius = 0.5 * settingsButton.bounds.size.width 
    settingsButton.clipsToBounds = true 
    settingsButton.imageView?.contentMode = .scaleAspectFit 



    NotificationCenter.default.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil) 


} 

func appMovedToForeground() { 
    tapToPlayLabel.startBlink() 
    settingsButton.startRotating() 
    print("DID") 
} 
+3

添加CALayerAnimation你试图用'didBecomeActive'通知,而不是'willEnterForeground'?我假设动画可能正在工作,但由于在'willEnterForeground'上调用了代码,所以您没有看到动画发生 – Malik

+0

@Malik您应该添加您的评论作为答案 – klinger

+0

我假设它工作。感谢您的高举。只是发布它作为答案 – Malik

回答

1

要重新启动你的动画你有做下面的事情,请检查下面的代码。

检查扩展

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var tapToPlayLabel: UILabel! 
    @IBOutlet weak var settingsButton: UIButton! 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     settingsButton.layer.cornerRadius = settingsButton.frame.size.width/2 
     settingsButton.clipsToBounds = true 
     //settingsButton.imageView?.contentMode = .scaleAspectFit 

     settingsButton.startRotating() 
     tapToPlayLabel.startBlink() 

     NotificationCenter.default.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil) 
    } 

    func appMovedToForeground() { 
     self.tapToPlayLabel.startBlink() 
     self.settingsButton.startRotating() 
    } 
} 

extension UILabel { 
    func startBlink() { 
     self.alpha = 1 
     UIView.animate(withDuration: 0.8, 
         delay:0.0, 
         options:[.autoreverse, .repeat], 
         animations: { 
         self.alpha = 0 

     }, completion: nil) 
    } 
} 

extension UIButton { 

    func startRotating() { 
     self.transform = CGAffineTransform(rotationAngle: CGFloat.pi/2) 
     UIView.animate(withDuration: 4.0, delay: 0.0, options:[.autoreverse, .repeat,UIViewAnimationOptions.allowUserInteraction], animations: { 
      self.transform = CGAffineTransform(rotationAngle: CGFloat.pi) 
     }, completion: nil) 
    } 
} 

输出

enter image description here

+0

这是适合你的吗? –

0

我想你需要一点点延迟运行你的动画由于已有的应用程序的执行,同时委托应用正在转向前景。

0

或者您也可以的UILabel

extension UILabel { 

    func startBlink() { 

     let scaleAnimation = CAKeyframeAnimation(keyPath: "transform") 
     scaleAnimation.delegate = self as? CAAnimationDelegate 
     let transform: CATransform3D = CATransform3DMakeScale(1.5, 1.5, 1) 
     scaleAnimation.values = [NSValue(caTransform3D: CATransform3DIdentity), NSValue(caTransform3D: transform), NSValue(caTransform3D: CATransform3DIdentity)] 
     scaleAnimation.duration = 0.5 
     scaleAnimation.repeatCount = 100000000 
     self.layer.add(scaleAnimation as? CAAnimation ?? CAAnimation(), forKey: "scaleText") 
    } 
    func startRotating() { 

     let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") 
     rotation.fromValue = 0 
     rotation.toValue = NSNumber(value: Double.pi * 2) 
     rotation.duration = 2 
     rotation.isCumulative = true 
     rotation.repeatCount = .greatestFiniteMagnitude 
     self.layer.add(rotation, forKey: "rotationAnimation") 

    } 
} 
相关问题