Tim Tim - 4 years ago 174
Swift Question

animateWithDuration() stops after app exit

I've incorporated a glow effect into my UIButtons, (code taken from https://github.com/bc-oscar/Glowing-UIButton). The code is in a separate swift file and the buttons are defined in the view controller as being of type 'GlowingButton', and changed to derive from this custom class in the identity inspector. The effect works when the app is run the first time but then stops when returning to it after exit?

import UIKit

class GlowingButton: UIButton {

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code

// Creates a glow effect in the button by setting its layer shadow properties
func startGlowWithCGColor (growColor:CGColor) {
self.layer.shadowColor = growColor
self.layer.shadowRadius = 10.0
self.layer.shadowOpacity = 1.0
self.layer.shadowOffset = CGSizeZero
self.layer.masksToBounds = false

// Autoreverse, Repeat and allow user interaction.
UIView.animateWithDuration(1.0, delay: 0, options: [UIViewAnimationOptions.Autoreverse, UIViewAnimationOptions.CurveEaseInOut, UIViewAnimationOptions.Repeat, UIViewAnimationOptions.AllowUserInteraction],
animations: { () -> Void in
// Make it a 15% bigger
self.transform = CGAffineTransformMakeScale(1.15, 1.15)
}) { (Bool) -> Void in
// Return to original size
self.layer.shadowRadius = 0.0
self.transform = CGAffineTransformMakeScale(1.0, 1.0)

// Removes the animation
func stopGlow () {
self.layer.shadowRadius = 0.0
self.transform = CGAffineTransformMakeScale(1.0, 1.0)
self.layer.masksToBounds = true


Answer Source

I don't fully understand what causes this but it seems exiting the app leaves the function stuck on self.transform = CGAffineTransformMakeScale(1.0, 1.0). Recursively calling the function with self.startGlowWithCGColor(growColor) restarts the effect.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download