使用UIView.Animate动画图层不透明度

时间:2015-05-22 12:26:40

标签: c# ios xamarin xamarin.ios

我有2 CALayers,每张都有一张图片。两者都有Opacity的初始0

我希望在1秒钟内将Layer1' Opacity动画为1,直接开始。然后在0.5秒的延迟之后,我想在1秒钟内将Layer2的Opacity动画为1。这两层层叠在一起。

我想要实现的是让第一个图像淡入,然后在淡入时,将第二个图像淡入其中。

但由于某些原因我无法使用UIView.Animate,因为它根本没有动画,只是立即设置值。

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

这里只是试图直接相继运行动画,它仍然只是立即设置值,没有动画。

3 个答案:

答案 0 :(得分:3)

UIView动画旨在为UIView属性设置动画,但似乎与CALayers不相符。使用UIImageViews而不是CALayers可以解决您的问题(然后您应该使用imageView.alpha属性而不是layer.opacity属性)。

但是,如果您坚持使用CALayers,则可以使用CABasicAnimation为它们设置动画。下面的代码完成了你描述的动画(注意这是Swift代码,因为我不使用Xamarin)。

urls.extend(parsePageUrls(page))

答案 1 :(得分:1)

您只能使用UIView.Animate:

为以下属性设置动画
  • UIView.Frame
  • UIView.Bounds
  • UIView.Center
  • UIView.Transform
  • UIView.Alpha
  • UIView.BackgroundColor
  • UIView.ContentStretch

对于更复杂的动画,您必须像@bjornorri一样使用CABasicAnimation。

答案 2 :(得分:1)

你们是正确的,因为我试图使用不正确的方法为图层添加动画效果。我最终做的是用UIImageView替换图层并使用UIView.Animate更改Alpha属性。

这不仅更容易编码,似乎UIImageView在图像方面实际上更具性能。