Я хотел бы иметь какую-то импульсную анимацию (бесконечный цикл «масштабирование - масштабирование») на UIButton, чтобы он сразу привлекал внимание пользователей.
Я видел эту ссылку Как создать эффект импульса с помощью -webkit-animation - outward rings, но мне было интересно, есть ли способ сделать это только с использованием собственной структуры?
ios
objective-c
animation
uikit
Иоганн
источник
источник
myView.layer
чтобы получить к нему доступ. Слои можно анимировать с помощью Core Animation. Для масштабного преобразования вы можете использовать этот подход: Поддержка ключевого пути для полей структуры#import <QuartzCore/QuartzCore.h>
, чтобы получить все определения для CALayers.Вот быстрый код для этого;)
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)
источник
В быстром коде отсутствует a
fromValue
, мне пришлось добавить его, чтобы он заработал.pulseAnimation.fromValue = NSNumber(float: 0.0)
Также
forKey
должен быть установлен, иначеremoveAnimation
не работает.self.view.layer.addAnimation(pulseAnimation, forKey: "layerAnimation")
источник
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) }
источник