Chciałbym mieć jakąś animację pulsu (nieskończona pętla „skalowanie do wewnątrz - skalowanie na zewnątrz”) na UIButton, aby natychmiast przyciągał uwagę użytkowników.
Widziałem ten link Jak stworzyć efekt pulsu za pomocą -webkit-animation - zewnętrzne pierścienie, ale zastanawiałem się, czy można to zrobić tylko przy użyciu natywnego frameworka?
ios
objective-c
animation
uikit
Johann
źródło
źródło
myView.layer
aby uzyskać do niego dostęp. Możesz animować warstwy za pomocą Core Animation. Do transformacji skali możesz użyć tego podejścia: Key Path Support for Structure Fields#import <QuartzCore/QuartzCore.h>
, aby uzyskać wszystkie definicje CALayers.Oto szybki kod;)
let pulseAnimation:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale") pulseAnimation.duration = 1.0 pulseAnimation.toValue = NSNumber(value: 1.0) pulseAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) pulseAnimation.autoreverses = true pulseAnimation.repeatCount = .greatestFiniteMagnitude self.view.layer.add(pulseAnimation, forKey: nil)
źródło
W szybkim kodzie brakuje a
fromValue
, musiałem go dodać, aby działał.pulseAnimation.fromValue = NSNumber(float: 0.0)
Również
forKey
powinien być ustawiony, w przeciwnym razieremoveAnimation
nie działa.self.view.layer.addAnimation(pulseAnimation, forKey: "layerAnimation")
źródło
func animationScaleEffect(view:UIView,animationTime:Float) { UIView.animateWithDuration(NSTimeInterval(animationTime), animations: { view.transform = CGAffineTransformMakeScale(0.6, 0.6) },completion:{completion in UIView.animateWithDuration(NSTimeInterval(animationTime), animations: { () -> Void in view.transform = CGAffineTransformMakeScale(1, 1) }) }) } @IBOutlet weak var perform: UIButton! @IBAction func prefo(sender: AnyObject) { self.animationScaleEffect(perform, animationTime: 0.7) }
źródło