Me gustaría tener algún tipo de pulso de animación (bucle infinito «de escala en escala out») en un UIButton por lo que se obtiene la atención de los usuarios inmediatamente.

Vi este enlace Cómo crear un efecto de pulso utilizando -webkit-animation – hacia el exterior de los anillos pero me preguntaba si habia alguna forma de hacer esto sólo utilizando el lenguaje del marco?

InformationsquelleAutor Johann | 2011-11-10

4 Comentarios

  1. 191
    CABasicAnimation *theAnimation;
    
    theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
    theAnimation.duration=1.0;
    theAnimation.repeatCount=HUGE_VALF;
    theAnimation.autoreverses=YES;
    theAnimation.fromValue=[NSNumber numberWithFloat:1.0];
    theAnimation.toValue=[NSNumber numberWithFloat:0.0];
    [theLayer addAnimation:theAnimation forKey:@"animateOpacity"]; //myButton.layer instead of

    Swift

    let pulseAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.opacity))
    pulseAnimation.duration = 1
    pulseAnimation.fromValue = 0
    pulseAnimation.toValue = 1
    pulseAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
    pulseAnimation.autoreverses = true
    pulseAnimation.repeatCount = .greatestFiniteMagnitude
    view.layer.add(pulseAnimation, forKey: "animateOpacity")

    Ver el artículo «la Animación de la Capa de Contenido»

    • no te olvides de añadir QartzCore marco de su proyecto
    • Gracias por tu respuesta! Tengo que decir que estoy un poco atascado, aunque. Yo no estoy familiarizado del todo con CALayer y no estoy seguro de cómo vincular con mi UIButton. Además de su código parece que el cambio de opacidad, no de escala.
    • está bien). El pulso de la animación’ es un término generalmente aplicado a efecto de parpadeo – como se dijo en el ejemplo en ese enlace. Ahora puedo volver a leer tu pregunta y entender lo que usted quiere. En primer lugar, cada punto de vista tiene propia capa. Si QartzCore marco se agrega al proyecto, a continuación, escriba myView.layer para acceder a ella. Puede animar capas con Núcleo de Animación. Para la escala de la transformación también puede utilizar este método: la Ruta de la Clave de Apoyo para la Estructura de Campos
    • Fantástico! Usando @»transformar.escala» en lugar de » @»opacidad» funciona como un encanto. Muchas gracias!
    • Usted es bienvenido)
    • Si usted no lo tiene, usted necesita agregar #import <QuartzCore/QuartzCore.h> con el fin de obtener todas las definiciones de CALayers.
    • UGH! No modificar 3 años de edad de respuestas que están fuera de fecha, a menos que usted está actualizando la respuesta real a la correcta versión moderna. La adición de espacios no es la actualización de la misma. En particular, no a resucitar después de 3 años.
    • Si desea agregar un bonito curvas de animación, utilice el siguiente fragmento de código (tomado de developerfeed.com/…): theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    • Decir que agregar esto a múltiples puntos de vista, pero sólo quiero uno para el pulso a la vez, una vez que la animación se agrega, hay un on/off de definición…distinto .removeAllAnimation o .removeAnimationForKey. O estamos obligados a eliminar, a continuación, reAdd la pulseAnimation?……y cuál es la sobrecarga si acabamos de salir de esta animación se ejecuta constantemente.
    • ruta de acceso clave es appstore seguro..?
    • Gracias. Su trabajo bien.
    • Sólo para estar completamente precisa – FLT_MAX es grande, pero finito valor.
    • la combinación con la siguiente respuesta hace efecto de pulso este solo hace opacidad necesita agregar transformar aswell
    • hola. ¿cómo puedo aplicar para GMSMarker?
    • no es trabajo para mí

  2. 27

    Aquí es el código swift de la pena 😉

    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)
    • ¿Qué pasa con todos los puntos y comas? 😉
    • la semi colon establece el tipo de pulseAnimation constante. No es necesario usar pero no tiende a aumentar código claridad cuando el lado derecho de una asignación no hacer obvio lo que escriba va a asignar.
    • Supongo que estás hablando del colon. Mi comentario era una broma para la respuesta original, ya que no es necesario el punto y coma con Swift. Supongo que no era tan obvio ahora, cuando la respuesta ha sido editada en un montón 🙂
    • Mucho mejor «pulso» efecto de la aceptó respuesta 🙂
  3. 8

    El código swift es que falta un fromValue, he tenido que añadir para que funcione.

    pulseAnimation.fromValue = NSNumber(float: 0.0)

    También forKey se debe establecer, de lo contrario removeAnimation no funciona.

    self.view.layer.addAnimation(pulseAnimation, forKey: "layerAnimation")
    • Gracias! He editado la otra respuesta con los cambios.
  4. 3
    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)
    }

Dejar respuesta

Please enter your comment!
Please enter your name here