Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用UIView设置图层不透明度的动画。设置动画_C#_Ios_Xamarin_Xamarin.ios - Fatal编程技术网

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")