Animar la opacidad de capa con UIView.Animate

Tengo 2 CALayers , cada uno con una image. Ambos tienen una Opacity inicial de 0 .

Quiero animar la Opacity de Layer1 a 1 en 1 segundo, comenzando de inmediato. Luego, después de un retraso de 0.5 segundos, quiero animar la Opacity de Layer2 a 1 en 1 segundo. Estas 2 capas se sientan una encima de la otra.

Lo que estoy tratando de lograr es hacer que la primera image se desvanezca, luego, mientras se desvanece, se desvanece la segunda image sobre ella.

Pero no puedo usar UIView.Animate por alguna razón, ya que no anima en absoluto, simplemente establece los valores de inmediato.

  UIView.Animate(1, 0, UIViewAnimationOptions.CurveEaseIn, () => { backgroundLayer.Opacity = 1; }, () => UIView.Animate(5, () => { backgroundLayer2.Opacity = 1; })); 

Aquí simplemente se intenta ejecutar la animation directamente una detrás de otra y aún así se establecen los valores de inmediato y no hay animation.

Las animaciones de UIView están destinadas a animar las properties de UIView y no parecen funcionar bien con CALayers. Usar UIImageViews en lugar de CALayers resolvería su problema (entonces debería usar la propiedad imageView.alpha en lugar de la propiedad layer.opacity).

Sin embargo, si insiste en usar CALayers, puede animarlos con CABasicAnimation. El siguiente código realiza la animation que describiste (ten en count que es un código Swift, ya que no uso Xamarin).

  var animation1 = CABasicAnimation(keyPath: "opacity") // Don't go back to the initial state after the animation. animation1.fillMode = kCAFillModeForwards animation1.removedOnCompletion = false // Set the initial and final states of the animation. animation1.fromValue = 0 animation1.toValue = 1 // Duration of the animation. animation1.duration = 1.0 var animation2 = CABasicAnimation(keyPath: "opacity") animation2.fillMode = kCAFillModeForwards animation2.removedOnCompletion = false animation2.fromValue = 0 animation2.toValue = 1 animation2.duration = 1.0 // Add a 0.5 second delay. animation2.beginTime = CACurrentMediaTime() + 0.5 // Animate! backgroundLayer.addAnimation(animation1, forKey: "opacity") backgroundLayer2.addAnimation(animation2, forKey: "opacity") 

Solo puedes animar las siguientes properties con UIView.Animate:

  • UIView.Frame
  • UIView.Bounds
  • UIView.Center
  • UIView.Transform
  • UIView.Alpha
  • UIView.BackgroundColor
  • UIView.ContentStretch

Para animaciones más sofisticadas, debe usar CABasicAnimation como en la respuesta @bjornorri.

Ustedes tienen razón en que estaba tratando de animar capas usando los methods incorrectos. Lo que terminé haciendo fue replace las capas con UIImageView y usar UIView.Animate para cambiar las properties Alpha .

No solo era más fácil de codificar, parece que UIImageView s son en realidad más efectivos en lo que respecta a las imágenes.