C# 使用UIView设置图层不透明度的动画。设置动画
我有两个C# 使用UIView设置图层不透明度的动画。设置动画,c#,ios,xamarin,xamarin.ios,C#,Ios,Xamarin,Xamarin.ios,我有两个calayer,每个都有一个图像。两者的初始不透明度为0 我想在1秒内将第1层的不透明度设置为1,立即开始。然后在延迟0.5秒后,我想在1秒内将第2层的不透明度设置为1。这两层相互叠置 我试图实现的是让第一个图像淡入,然后当它淡入时,在它上面淡入第二个图像 但是由于某种原因,我不能使用UIView.Animate,因为它根本没有动画,只是直接设置值 UIView.Animate(1, 0, UIViewAnimationOptions.CurveEaseIn, () =&
calayer
,每个都有一个图像。两者的初始不透明度为0
我想在1秒内将第1层的不透明度
设置为1
,立即开始。然后在延迟0.5秒后,我想在1秒内将第2层的不透明度设置为1
。这两层相互叠置
我试图实现的是让第一个图像淡入,然后当它淡入时,在它上面淡入第二个图像
但是由于某种原因,我不能使用UIView.Animate
,因为它根本没有动画,只是直接设置值
UIView.Animate(1, 0, UIViewAnimationOptions.CurveEaseIn, () =>
{
backgroundLayer.Opacity = 1;
}, () => UIView.Animate(5, () =>
{
backgroundLayer2.Opacity = 1;
}));
这里只是尝试一个接一个地运行动画,但它仍然只是立即设置值,没有动画。UIView动画用于设置UIView属性的动画,似乎与CALayers的效果不太好。使用UIImageView而不是CALayers可以解决您的问题(那么您应该使用imageView.alpha属性而不是layer.opacity属性)
但是,如果您坚持使用Calayer,您可以使用Cabasicanization为其设置动画。下面的代码完成了您描述的动画(请注意,这是Swift代码,因为我不使用Xamarin)
您只能使用UIView设置以下属性的动画。设置动画:
- UIView.Frame
- UIView.Bounds
- 中景
- UIView.Transform
- UIView.Alpha
- UIView.BackgroundColor
- UIView.ContentStretch
对于更复杂的动画,您必须使用像@bjornorri answer中的cabasicanition。你们是正确的,因为我尝试使用不正确的方法制作层动画。我最后做的是用UIImageView
替换图层,并使用UIView.Animate
更改Alpha
属性
这不仅更容易编码,而且当涉及到图像时,UIImageView
s实际上更具性能
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")